2016-06-23 11 views
-1

Ich spalte unter Zeichenfolge mit mehreren Trennzeichen. Trennzeichen sind:String Splitting mit mehreren Trennzeichen Java

String[] tokens = s.split("[!|?|,|.|_|'|@ |\\s]"); 

Für die Eingabe:

, . @ ? ! _ ' and white space etc. 

Unten ist mein Code

Er ist ein sehr, sehr guter Junge, nicht wahr?

nach Split Erwarteter Ausgang: 10-Token

Er
ist
ein
sehr
sehr
gut
Junge
isn
t
er

Aber ich bin unten ouput bekommen: 11 Token

Er
ist
ein
sehr
sehr
gut
Junge

isn
t
er

Da zwei Delimiter Whitespace und Komma nebeneinander liegen, gibt es 11 Token. Wie bekomme ich die erwartete Ausgabe?

+1

erste Sache zuerst..Zeichenklasse ist ODER-Bedingung für Zeichen..so keine Notwendigkeit der Verwendung von '|' in Zeichenklasse – rock321987

+0

Können Sie genauer mit Ihrem "etc." sein in deinen Begrenzern? Welche anderen Zeichen würden Trennzeichen sein? – 4castle

+0

Sie können String-Tokenization auch verwenden. – denis

Antwort

3

Sie können + verwenden, um die Kombination zu finden, wenn Sie mehrere aufeinanderfolgende Trennzeichen vermeiden wollen, die in leeren String ergibt

s.split("[,[email protected]?!_'\\s]+") 

HINWEIS: - Wie ich in Kommentar erwähnt, Zeichenklasse selbst arbeitet als OR Bedingung für Zeichen. Es ist also nicht notwendig, | innerhalb der Zeichenklasse zu verwenden, um eine Alternierung zu erreichen, da sie wörtlich mit | übereinstimmt.

3

Um mehr als eine aufeinanderfolgende Trennzeichen entsprechen, verwenden Sie die +:

s.split("[,[email protected]?!_'\\s]+"); 

Eine andere Regex, die Sie berücksichtigen sollten mit ist:

s.split("[\\W_]+"); 

Diese so aufgeteilt wird, dass jede Nicht-Wortzeichen werden als Trennzeichen behandelt werden. Dies ist nicht durch Ihre Frage spezifiziert, aber es hat auch die Ausgabe, die Sie erwarten.

+0

das ist wirklich schön! –