Come faccio a dividere una stringa con eventuali caratteri di spazi bianchi come delimitatori?

StackOverflow https://stackoverflow.com/questions/225337

  •  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?

È stato utile?

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")

http: //commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#split(java.lang.String)

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

        } 
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top