2015-07-07 9 views
7

Wie teilen Sie eine Zeichenkette und behalten Sie Whitespaces? HierSo teilen Sie() eine Zeichenkette, während Sie Whitespace beibehalten

ist der Code:

String words[] = s.split(" "); 

String s enthält: hello world

Nachdem der Code ausgeführt wird, also [] enthält: "hello"""world

Idealerweise sollte es nicht leer sein Zeichenfolge in der Mitte, aber beide Leerzeichen enthalten: words [] sollte sein: "hello"" "" "world

Wie bekomme ich es, um dieses Ergebnis zu haben?

+0

Warum möchten Sie Ihre Saite nicht trimmen? – bish

+0

Weil ich es wörtlich behalten muss, was der Benutzer eingibt. Es ist Teil der Spezifikationen. –

+2

'String.split' entfernt das Trennzeichen, das Sie ihm übergeben haben (in diesem Fall das Leerzeichen). Wenn Sie ein anderes Verhalten wünschen, müssen Sie selbst eine Variante von 'Split' implementieren. – Chronio

Antwort

10

könnten Sie lookahead/lookbehind Behauptungen verwenden:

String[] words = "hello world".split("((?<=\\s+)|(?=\\s+))"); 

wo (?<=\\s+) und (?=\\s+) Null-Breite-Gruppen.

3

s.split("((?<=)|(?=))"); ist ein Weg.

Technisch verwendet der reguläre Ausdruck Lookahead und Lookbehind. Der einzelne Abstand nach jedem = ist der Begrenzer.

1

Man könnte so etwas tun:

List<String> result = new LinkedList<>(); 
int rangeStart = 0; 
for (int i = 0; i < s.length(); ++i) { 
    if (Character.isWhitespace(s.charAt(i))) { 
    if (rangeStart < i) { 
     result.add(s.substring(rangeStart, i)); 
    } 
    result.add(Character.toString(s.charAt(i))); 
    rangeStart = i + 1; 
    } 
} 
if (rangeStart < s.length()) { 
    result.add(s.substring(rangeStart)); 
} 

Ja, keine regulären Ausdrücke, mich verklagen. Auf diese Weise können Sie sehen, wie es einfacher funktioniert.

+1

Ich habe das getestet, und ich kann bestätigen, dass es funktioniert. –

1

Wenn Sie beide weißen Flächen zusammen in einem String tolerieren können, können Sie Wörter enthält ("hello", " ", "world") tun

String[] words = s.split("\\b"); 

Dann.

+1

+1, denn in meinem Fall wäre dies auch akzeptabel gewesen, weil ich letztlich versucht habe, die Zeichen jedes Wortes umzukehren, aber die Wörter in der richtigen Reihenfolge zu belassen und zwischen jedem Wort den gleichen Leerraum zu halten. –

Verwandte Themen