2013-04-30 11 views
7

Ich habe eine Zeichenfolge wie ||81|||01|| und ich möchte die Zeichenfolge mit | Symbol teilen.Java: Teilen Sie eine Zeichenfolge, die Sonderzeichen enthält

ich auf diese Weise, getan hatte, ist

String str = "||81|||01||"; 
System.out.println(str .split("\\|").length); //printing 6 . But I am expecting 8 

was mit diesem Code falsch? | Wie kann ich diese Zeichenfolge mit diesem Zeichen teilen, damit ich die erwartete Länge (8) bekomme?

+0

Warum denken Sie 8 wie erwartet Ergebnis? – NINCOMPOOP

+0

@NoobUnChained wenn es 'n' Trennzeichen gibt, sollte der String in' n + 1' Teile aufgeteilt werden. In der gegebenen Eingabe gibt es '7' Pfeifen, also sollte es' 8' Ergebnisse geben. –

+0

Führe ein Leerzeichen am Anfang und am Ende ein: '" || 81 ||| 01 || "' um das erwartete Ergebnis zu erhalten;) – NINCOMPOOP

Antwort

8

Druck:

System.out.println(Arrays.toString(str.split("\\|")));

Und Sie werden verstehen, warum es 6.

Druck

Sie können versuchen, zu tun, was Sie wollen, mit den öffentlichen String[] split(String regex, int limit):

Der Grenzwert Parameter steuert, Die Häufigkeit, mit der das Muster angewendet wird, wirkt sich daher auf die Länge des resultierenden Arrays aus.

So sollten Sie tun:

System.out.println(str.split("\\|", -1).length); 

Nun Druck das Array gedruckt wird:

[, , 81, , , 01, , ] wie erwartet.

1

Sie müssen verwenden:

str.split("\\|", -1) 

Der zweite Parameter limit ist. Vom Javadoc-:

Der Grenzwert Parameter steuert die Anzahl, wie oft das Muster angewandt und daher beeinflusst die Länge des resultierenden Arrays. Wenn der Grenzwert n größer als Null ist, wird das Muster unter am meisten n - 1 Mal angewendet, die Länge des Arrays ist nicht größer als n und Der letzte Eintrag des Arrays enthält alle Eingaben nach dem letzten übereinstimmenden Trennzeichen. Wenn n nicht positiv ist, wird das Muster so oft wie möglich als angewendet und das Array kann eine beliebige Länge haben. Wenn n null ist dann wird das Muster so oft wie möglich angewendet, das Array kann eine beliebige Länge haben, und nachfolgende leere Strings werden verworfen.

11

split("\\|") Verwendung ist die gleiche wie split("\\|", 0), wo der Parameter limit 0 die Funktion sagt "weglassen leere Strings Hinter". Du verpasst also die letzten zwei leeren Saiten. Verwenden Sie die zweiargumentigen Version und liefert eine negative Zahl alle Teile zu erhalten (auch leere Hinter):

str.split("\\|", -1) 
+1

Lieber Downvoter, möchtest du einen Kommentar hinterlassen, damit ich die Antwort verbessern kann? –

1

str.split("\\|", -1) die notwendigen tun. Mögliche doppelte: Here

1

String str = "||81|||01||"; System.out.println(str.split("\\|", 8).length);

Das zweite Argument aufzuspalten gibt maximale Anzahl von Übereinstimmungen. Die Aufteilung einzelner Argumente ist wie das Aufrufen von split (str, 0), wodurch nachgestellte Strings weggelassen werden. Siehe Javadoc von beiden für weitere Erläuterungen.

+0

mit '8' ist ziemlich unflexibel. Wenn Sie nur ein negatives Argument (wie die anderen Antworten) verwenden, erhalten Sie einfach alle Teile, egal wie viele '|' es sind in 'str' –

3

Sie können auch string.split (Pattern.quote ("|"), - 1) zum Aufteilen einer Zeichenfolge auf ein Sonderzeichen verwenden.

+1

Könnten Sie bitte mehr Ihre Antwort erarbeiten, ein wenig mehr Beschreibung über die hinzufügen Lösung, die Sie bereitstellen? – abarisone

+0

Beispiel zum Aufteilen "|| 81 ||| 01 ||" basierend auf dem Sonderzeichen '|' dann kannst du verwenden 'String s =" || 81 ||| 01 || "; String-Array [] = s.split (Pattern.quote ("|"), - 1) ' Länge des so erhaltenen Arrays ist 8. – Santosh

Verwandte Themen