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

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache?

Node.js 20: wichtige Leistungssteigerung und neue Funktionen

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?

ICEBERG: Die Zukunft von Data Lake Tabellen

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Problem behoben

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?
