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?

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


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.




64

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

myString.split(/\s+/g)

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

isso me ajuda!
Surasin Tancharoen

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

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

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


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

        } 
    }
}

Você pode por favor detalhar sua resposta?
Stephan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.