2017-06-06 5 views
0

Betrachten Sie eine Zeichenfolge wie unten mit Trennzeichen __|__.String.split vs StringUtils.split in Java gibt verschiedene Ergebnisse

String str = "a_b__|__c_d"; 

str.split("__\\|__") erhält man 2-Splits A_b und C_D StringUtils.split(str, "__|__") or StringUtils.split(str, "__\\|__") gibt 4 aufspaltet a, b, c, d, die nicht erwünscht ist.

Gibt es eine Möglichkeit, StringUtils.split() zu geben, um die gleichen Ergebnisse String.split() zu geben?

+2

Verwenden Sie stattdessen StringUtils.splitByWholeSeparator! – nCessity

Antwort

3

String.split() hat einige very surprising Semantik, und es ist selten, was Sie wollen. Sie sollten StringUtils (oder Guava Splitter, im vorherigen Link diskutiert) bevorzugen.

Ihr spezifisches Problem ist, dass String.split() einen regulären Ausdruck verwendet, während StringUtils.split() jedes Zeichen als separates Token verwendet. Sie sollten StringUtils.splitByWholeSeparator() verwenden, um den Inhalt der vollständigen Zeichenfolge zu teilen.

StringUtils.splitByWholeSeparator(str, "__|__"); 
+0

Ich empfehle StringUtils.splitByWholeSeparatorPreserveAllTokens ("- a - b -", "-") -> ["", "a", "", "b", ""], die PHP explodiert ("-", " -a - b- ") -> [" "," a "," "," b "," "]. StringUtils.splitByWholeSeparator ("- a - b -", "-") gibt ["a", "b", ""] zurück, was ich unerwartet finde. –

+0

Matching PHP Semantik ist im Allgemeinen wahrscheinlich ein Anti-Ziel;) – dimo414

1

Nein, laut Dokumentation ist der zweite Parameter von StringUtils.split die Liste aller Zeichen, die als Splitter gelten. Es gibt eine andere Funktion in Apache Commons, die das tut, was Sie wollen - StringUtils.splitByWholeSeparator. Trotzdem, ich verstehe nicht, was mit der einfachen String.split vorgeht.

+0

Danke. Ich wusste nicht, dass eine solche Methode existiert. Nun, ich kann String.split() verwenden, aber ich bevorzuge StringUtils. splitByWholeSeparator() wie es auch von Null-Strings dauert. – user1013528

Verwandte Themen