Come dividere una stringa con qualsiasi carattere di spazio vuoto come delimitatore


555

Che modello di espressione regolare avrebbe bisogno ho di passare a java.lang.String.split() dividere una stringa in un array di stringhe utilizzando tutti i caratteri di spaziatura ( ' ', '\t', '\n', etc.) come delimitatori?

Risposte:


955

Qualcosa nelle righe di

myString.split("\\s+");

Questo raggruppa tutti gli spazi bianchi come delimitatore.

Quindi se ho la stringa:

"Hello[space][tab]World"

Questo dovrebbe produrre le stringhe "Hello"ed "World"omettere lo spazio vuoto tra il [space]e il [tab].

Come VonC ha sottolineato, il backslash deve essere sfuggito, perché Java dovrebbe prima cercare di sfuggire la stringa in un carattere speciale, e inviare che per essere analizzato. Quello che vuoi è letterale "\s", il che significa che devi passare "\\s". Può diventare un po 'confuso.

Il \\sequivale a [ \\t\\n\\x0B\\f\\r].


1
Grazie per quel promemoria. Stavo solo scrivendo un codice dall'anca :)
Henrik Paul,

34
Nota che devi trim()prima: trim().split("\\s++")- altrimenti, ad es. La divisione di `abc` emetterà prima due stringhe vuote.
Marcus Junius Brutus,

Perché hai usato quattro barre rovesciate verso la fine della tua risposta? vale a dire. "\\\\s"?
Michael Borkowski,

"" .trim (). split ("\\ s +") - la stringa vuota split ti dà una lunghezza di 1. "term" .trim (). split ("\\ s +") - ti dà anche una lunghezza di 1 .
PaulSchell

88

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 bianco.

\S - Corrisponde a tutto tranne che ai caratteri degli spazi bianchi.

\d - Abbina qualsiasi cifra.

\D - Trova tutto tranne le cifre.

Una ricerca di "Schede tecniche di Regex" dovrebbe premiarti con molti sommari utili.




64

Per farlo funzionare in Javascript , ho dovuto fare quanto segue:

myString.split(/\s+/g)

15
Questo è in Javascript. Non stavo prestando attenzione :)
miracle2k,

14
Ops. Errore mio. Forse questa risposta aiuterà ancora alcuni altri che si imbattono in questa discussione mentre cercano una risposta Javascript. :-)
Mike Manard

Haha stavo cercando una risposta per JavaScript, per caso mi sono imbattuto in questa domanda e poi ho notato la tua risposta prima di partire. +1.
Kris

È fantastico! Sono felice di sentire che questa risposta si è rivelata utile per qualcuno, anche se ha risposto alla domanda sbagliata. :-)
Mike Manard

Questo mi ha aiutato moltissimo, necessario per dividere gli argomenti del server :)
ProgrammerPlay


11

Inoltre potresti avere uno spazio non-break UniCode xA0 ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking

questo mi aiuta!
Surasin Tancharoen,

10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

@Stephan Non li ho visti.
Freccia


2

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]+/)

1

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


-1

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

        } 
    }
}

Potete per favore dettagliare la vostra risposta?
Stephan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.