Heim > Java > javaLernprogramm > Hauptteil

Wie teilt man Zeichenfolgen unter Beibehaltung von Trennzeichen auf?

Barbara Streisand
Freigeben: 2024-10-24 18:19:03
Original
879 Leute haben es durchsucht

How to Split Strings Preserving Delimiters?

Strings unter Beibehaltung der Trennzeichen aufteilen

Bei der Arbeit mit mehrzeiligen Strings ist es oft notwendig, diese mithilfe von Trennzeichen in ihre Bestandteile aufzuteilen. Das Standardverhalten von String.split() verwirft jedoch die Trennzeichen und lässt nur den extrahierten Text übrig.

Problem:

Betrachten Sie die folgende Zeichenfolge:

(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)
Nach dem Login kopieren

Das Teilen dieser Zeichenfolge mit String.split() ergibt:

  • Text1
  • Text2
  • Text3
  • Text4

Gewünschte Ausgabe:

Um die Trennzeichen beizubehalten und die Zeichenfolge entsprechend aufzuteilen, benötigen wir einen Ansatz, der die Trennzeichen beibehält.

Lösung :

Das JDK bietet eine Möglichkeit, dies mithilfe von Lookahead- und Lookbehind-Funktionen für reguläre Ausdrücke (Regex) zu erreichen. So funktioniert es:

<code class="java">System.out.println(Arrays.toString("a;b;c;d".split("(?<=;)")));
System.out.println(Arrays.toString("a;b;c;d".split("(?=;)")));
System.out.println(Arrays.toString("a;b;c;d".split("((?<;=;)|(?=;))")));</code>
Nach dem Login kopieren

Dies führt zu folgender Ausgabe:

  • [a;, b;, c;, d]
  • [a , ;b, ;c, ;d]
  • [a, ;, b, ;, c, ;, d]

Die letzte Ausgabe richtet sich nach dem gewünschten Format, wobei Jedes Trennzeichen bleibt erhalten und die Zeichenfolge wird in separate Teile aufgeteilt.

Regex-Erklärung:

  • (?<=;): Sucht nach einem Semikolon und wählt davor einen Platzhalter mit der Breite Null aus.
  • (?=;): Sucht nach einem Semikolon und wählt danach einen Platzhalter mit der Breite Null aus.
  • ((?<;= ;)|(?=;)): Eine Gruppe, die entweder einem Platzhalter mit der Breite Null vor einem Semikolon oder nach einem Semikolon entspricht.

Durch die Kombination dieser Muster teilen wir die Zeichenfolge effektiv an jedem Trennzeichen auf Dabei bleibt das Trennzeichen selbst als Teil der Ausgabe erhalten.

Verbesserungen der Lesbarkeit:

Für eine bessere Lesbarkeit sollten Sie die Verwendung benannter regulärer Ausdrücke wie folgt in Betracht ziehen:

<code class="java">static public final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))";

public void someMethod() {
    final String[] aEach = "a;b;c;d".split(String.format(WITH_DELIMITER, ";"));
    ...
}</code>
Nach dem Login kopieren

Dadurch wird der reguläre Ausdruck selbsterklärender und einfacher zu pflegen.

Das obige ist der detaillierte Inhalt vonWie teilt man Zeichenfolgen unter Beibehaltung von Trennzeichen auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!