Come faccio a dividere una stringa con eventuali caratteri di spazi bianchi come delimitatori?
-
03-07-2019 - |
Domanda
Quale modello regex sarebbe necessario per passare al metodo java.lang.String.split ()
per dividere una stringa in una matrice di sottostringhe usando tutti i caratteri degli spazi bianchi ('', '\ t ',' \ n ', ecc.) come delimitatori?
Soluzione
Qualcosa nelle righe di
myString.split("\\s+");
Questo raggruppa tutti gli spazi bianchi come delimitatore.
Quindi, se ho la stringa:
" Ciao [spazio] [scheda] World "
Questo dovrebbe produrre le stringhe " Hello "
e " World "
e omettere lo spazio vuoto tra [space]
e il [tab]
.
Come ha sottolineato VonC, la barra rovesciata dovrebbe essere salvata, perché Java prima proverebbe a sfuggire alla stringa a un carattere speciale e invierebbe che per essere analizzato. Quello che vuoi è letteralmente " \ s "
, il che significa che devi passare " \\ s "
. Può diventare un po 'confuso.
Il \\ s
è equivalente a [\\ t \\ n \\ x0B \\ f \\ r]
Altri suggerimenti
Nella maggior parte dei dialetti regex ci sono una serie di comodi riassunti di caratteri che puoi usare per questo tipo di cose - questi sono buoni da ricordare:
\ w
- Corrisponde a qualsiasi carattere di parola.
\ W
- Corrisponde a qualsiasi carattere non parola.
\ s
- Corrisponde a qualsiasi carattere di spazio vuoto.
\ S
- Corrisponde a qualsiasi cosa tranne che agli spazi bianchi.
\ d
: corrisponde a qualsiasi cifra.
\ D
- Corrisponde a qualsiasi cosa tranne le cifre.
Una ricerca di " Schede tecniche " dovrebbe premiarti con molti sommari utili.
Per farlo funzionare in Javascript , ho dovuto fare quanto segue:
myString.split(/\s+/g)
" \\ s + " dovrebbe fare il trucco
Inoltre potresti avere uno spazio non-break UniCode xA0 ...
String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
Apache Commons Lang ha un metodo per dividere una stringa con caratteri di spazi bianchi come delimitatori:
StringUtils.split("abc def")
Potrebbe essere più facile da usare di un modello regex.
Dal momento che è un'espressione regolare, e presumo che non vorresti anche caratteri non alfanumerici come virgole, punti, ecc. che potrebbero essere circondati da spazi vuoti (ad esempio "uno, due" dovrebbe dare [uno] [ due]), dovrebbe essere:
myString.split(/[\s\W]+/)
Sono sorpreso che nessuno abbia menzionato String.split () senza parametri. Non è per questo che è fatto? come in:
"abc def ghi".split()
puoi dividere una stringa per interruzione di riga usando la seguente istruzione:
String textStr[] = yourString.split("\\r?\\n");
puoi dividere una stringa per Whitespace usando la seguente istruzione:
String textStr[] = yourString.split("\\s+");
String str = "Hello World";
String res[] = str.split("\\s+");
Studia questo codice .. buona fortuna
import java.util.*;
class Demo{
public static void main(String args[]){
Scanner input = new Scanner(System.in);
System.out.print("Input String : ");
String s1 = input.nextLine();
String[] tokens = s1.split("[\\s\\xA0]+");
System.out.println(tokens.length);
for(String s : tokens){
System.out.println(s);
}
}
}