Heim >Java >javaLernprogramm >Wie teilt man Zeichenfolgen unter Beibehaltung von Trennzeichen auf?
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:
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:
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:
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!