Heim  >  Artikel  >  Java  >  Wie teilt man Zeichenfolgen unter Beibehaltung von Trennzeichen auf?

Wie teilt man Zeichenfolgen unter Beibehaltung von Trennzeichen auf?

Barbara Streisand
Barbara StreisandOriginal
2024-10-24 18:19:03861Durchsuche

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)

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>

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>

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!

Stellungnahme:
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