2015-07-07 12 views
7

Come si divide una stringa di parole e si conservano gli spazi bianchi?Come dividere() una stringa mantenendo gli spazi bianchi

Ecco il codice:

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

String s contiene: hello world

Dopo il codice viene eseguito, le parole [] contiene: "hello"""world

Idealmente, non dovrebbe essere un vuoto stringa al centro, ma contiene entrambi gli spazi bianchi: le parole [] devono essere: "hello"" "" "world

Come ottengo avere questo risultato?

+0

Perché non vuoi tagliare la tua stringa? – bish

+0

Perché ho bisogno di tenerlo parola per parola ciò che l'utente inserisce. Fa parte delle specifiche. –

+2

'String.split' rimuove il delimitatore fornito (lo spazio in questo caso). Se vuoi un comportamento diverso, dovresti implementare una variante di "split" te stesso. – Chronio

risposta

10

si potrebbe usare lookahead/lookbehind asserzioni:

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

dove (?<=\\s+) e (?=\\s+) sono gruppi di lunghezza zero.

3

s.split("((?<=)|(?=))"); è a senso unico.

Tecnicamente, l'espressione regolare utilizza lookahead e lookbehind. Il singolo spazio dopo ogni = è il delimitatore.

1

Si potrebbe fare qualcosa di simile:

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)); 
} 

Sì, non regex, mi Sue. In questo modo puoi vedere come funziona più facilmente.

+1

Ho provato questo, e posso attestare che funziona. –

1

Se si può tollerare entrambi gli spazi bianchi insieme in una stringa, si può fare

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

Poi le parole contiene ("hello", " ", "world").

+1

+1 perché nel mio caso, anche questo sarebbe stato accettabile, perché alla fine stavo cercando di invertire i caratteri di ogni parola, ma lasciare le parole in ordine e mantenere lo stesso spazio vuoto tra ogni parola. –

Problemi correlati