Como dividir uma string com caracteres de espaço em branco como delimitadores

555

Que padrão regex seria necessário eu passar para java.lang.String.split() dividir uma string em uma matriz de substrings usando todos os caracteres em branco ( ' ', '\t', '\n', etc.) como delimitadores?

mcjabberz
fonte

Respostas:

955

Algo nas linhas de

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

Isso agrupa todos os espaços em branco como um delimitador.

Então, se eu tiver a string:

"Hello[space][tab]World"

Isso deve produzir as cordas "Hello"e "World"omitir o espaço vazio entre o [space]e o[tab] .

Como VonC apontou, a barra invertida deve ser escapado, porque Java em primeiro lugar tentar escapar da cadeia para um caractere especial, e enviá que para ser analisado. O que você quer é o literal "\s", o que significa que você precisa passar "\\s". Pode ficar um pouco confuso.

O \\sé equivalente a [ \\t\\n\\x0B\\f\\r].

Henrik Paul
fonte
1
Obrigado por esse lembrete. Eu estava apenas codificação do hip :)
Henrik Paul
34
Observe que você precisa trim()primeiro: trim().split("\\s++")- caso contrário, por exemplo, a divisão do `abc` emitirá duas seqüências vazias primeiro.
Marcus Junius Brutus
Por que você usou quatro barras invertidas perto do final da sua resposta? ie "\\\\s"?
precisa
"" .trim (). split ("\\ s +") - a divisão de cadeia vazia fornece um comprimento de 1. "term" .trim (). split ("\\ s +") - fornece também um comprimento de 1 .
PaulSchell
88

Na maioria dos dialetos regex, há um conjunto de resumos de caracteres convenientes que você pode usar para esse tipo de coisa - estes são bons para lembrar:

\w - Corresponde a qualquer caractere de palavra.

\W - Corresponde a qualquer caractere não-palavra.

\s - Corresponde a qualquer caractere de espaço em branco.

\S - Corresponde a qualquer coisa, exceto caracteres em espaço em branco.

\d - Corresponde a qualquer dígito.

\D - Corresponde a qualquer coisa, exceto dígitos.

Uma pesquisa por "Regex Cheatsheets" deve recompensá-lo com vários resumos úteis.

glenatron
fonte
64

Para que isso funcione em Javascript , tive que fazer o seguinte:

myString.split(/\s+/g)
Mike Manard
fonte
15
Isto está em Javascript. Eu não estava prestando atenção tanto :)
miracle2k
14
Opa Meu erro. Talvez essa resposta ainda ajude outras pessoas que se deparam com esse tópico enquanto procuram uma resposta Javascript. :-)
Mike Manard
Haha Eu estava procurando uma resposta para JavaScript, encontrei acidentalmente essa pergunta e notei sua resposta antes de sair. +1.
Kris
Isso é ótimo! Fico feliz em saber que essa resposta foi útil para alguém, mesmo que ela respondesse à pergunta errada. :-)
Mike Manard
Isso me ajudou tanto quanto necessário, para dividir os argumentos do servidor :)
ProgrammerPlays
11

Além disso, você pode ter um espaço sem quebra UniCode xA0 ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
jake_astub
fonte
isso me ajuda!
Surasin Tancharoen
10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
Seta
fonte
@ Stephanie eu não vi aqueles.
Arrow
2

Como é uma expressão regular, e suponho que você também não queira caracteres não alfanuméricos, como vírgulas, pontos, etc., que possam estar cercados por espaços em branco (por exemplo, "um, dois" deve fornecer [um] [dois]), deveria ser:

myString.split(/[\s\W]+/)
Rishabh
fonte
1

você pode dividir uma string por quebra de linha usando a seguinte instrução:

 String textStr[] = yourString.split("\\r?\\n");

você pode dividir uma string pelo espaço em branco usando a seguinte instrução:

String textStr[] = yourString.split("\\s+");
RajeshVijayakumar
fonte
1
String str = "Hello   World";
String res[] = str.split("\\s+");
Olivia Liao
fonte
-1

Estude este código .. boa sorte

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

        } 
    }
}
Risith Ravisara
fonte
Você pode por favor detalhar sua resposta?
Stephan