Como dividir uma String por espaço


329

Eu preciso dividir minha String por espaços. Para isso, tentei:

str = "Hello I'm your String";
String[] splited = str.split(" ");

Mas isso não parece funcionar.


3
Parece bom ... quais são os valores na matriz 'dividida'?
Npinti 26/10/11

1
Seu código realmente funciona como está. Veja o código executado ao vivo em IdeOne.com .
Basil Bourque 12/10

@BasilBourque - Não encontrei nenhum botão de execução nesse link
nanosoft

1
@nanosoft A página no IdeOne.com é executada automaticamente após o carregamento. Veja a saída abaixo do código, na seção stdout . Para alterar o código, clique no forklink próximo ao canto superior esquerdo.
Basil Bourque

Respostas:


639

O que você tem deve funcionar. Se, no entanto, os espaços fornecidos tiverem como padrão ... outra coisa? Você pode usar o regex de espaço em branco:

str = "Hello I'm your String";
String[] splited = str.split("\\s+");

Isso fará com que qualquer número de espaços consecutivos divida sua sequência em tokens.

Como observação, não tenho certeza de que "dividido" seja uma palavra :) Eu acredito que o estado de ser vítima de uma divisão também é "dividido". É uma daquelas coisas gramaticais complicadas :-) Não tente ser exigente, apenas imaginei que eu a passaria adiante!


45
Sou suíço, o que você esperava, meu inglês não é o melhor; P, de qualquer forma, funcionou!
Safari

29
:-) Ei, não é grande. Eu usei alguns nomes de variáveis ​​ridículos (no código eu provavelmente não deveria ter deixado ir ao ar!) Eu não estava tentando ser um nazista de gramática ou qualquer coisa, apenas transmitindo um pouco de trivialidades, só isso.
corsiKa

7
@ Safari, você acabou de receber 2 ótimos conselhos no preço de 1. brincando. Ótima resposta.
Nirmal Mangal

8
"O que você tem deve funcionar". Digo algo semelhante com bastante frequência quando meu código é quebrado.
Griffin

1
Acho útil, pois meu caso de uso foi dividir a sequência e remover vários espaços. Uma linha de código faz as duas coisas para mim.
21418 Niharika Upadhyay

87

Embora a resposta aceita seja boa, lembre-se de que você terminará com uma sequência vazia à esquerda se a sequência de entrada começar com um espaço em branco. Por exemplo, com:

String str = " Hello I'm your String";
String[] splitStr = str.split("\\s+");

O resultado será:

splitStr[0] == "";
splitStr[1] == "Hello";
splitStr[2] == "I'm";
splitStr[3] == "Your";
splitStr[4] == "String";

Então, você pode aparar sua string antes de dividi-la:

String str = " Hello I'm your String";
String[] splitStr = str.trim().split("\\s+");

29

Acredito que colocar uma expressão regular entre parênteses str.split deve resolver o problema. O método Java String.split () é baseado em expressões regulares, portanto, o que você precisa é:

str = "Hello I'm your String";
String[] splitStr = str.split("\\s+");

12

Use Stringutils.split()para dividir a corda por ritmos brancos. Por exemplo, StringUtils.split("Hello World")retorna "Olá" e "Mundo";

Para resolver o caso mencionado, usamos o método split como este

String split[]= StringUtils.split("Hello I'm your String");

quando imprimirmos a matriz dividida, a saída será:

Olá

Eu estou

seu

Corda

Para um exemplo completo de demonstração, verifique aqui



6

se de alguma forma você não quiser usar o método Split, então você pode usar a classe StringTokenizer em Java como ..

    StringTokenizer tokens = new StringTokenizer("Hello I'm your String", " ");
    String[] splited = new String[tokens.countTokens()];
    int index = 0;
    while(tokens.hasMoreTokens()){
        splited[index] = tokens.nextToken();
        ++index;
    }

Existe a possibilidade de lançar a exceção ArrayIndexOutofBounds.
Ajay Takur

2
Não, isso não exibirá "ArrayIndexOutofBounds" porque declarei o tamanho da matriz de acordo com o número de tokens encontrados em String. isso garantirá que o tamanho das matrizes não exceda os tokens recebidos em uma sequência.
Muhammad Suleman

6

Tente este

    String str = "This is String";
    String[] splited = str.split("\\s+");

    String split_one=splited[0];
    String split_second=splited[1];
    String split_three=splited[2];

   Log.d("Splited String ", "Splited String" + split_one+split_second+split_three);

4

Uma maneira alternativa seria:

import java.util.regex.Pattern;

...

private static final Pattern SPACE = Pattern.compile(" ");
String[] arr = SPACE.split(str); // str is the string to be split

Vi aqui


3

OK, então precisamos dividir, já que você já recebeu a resposta que eu generalizaria.

Se você deseja dividir qualquer sequência por espaços, delimite (caracteres especiais).

Primeiro, remova o espaço à esquerda, pois eles criam a maioria dos problemas.

str1 = "    Hello I'm your       String    ";
str2 = "    Are you serious about this question_  boy, aren't you?   ";

Primeiro remova o espaço inicial que pode ser espaço, tabulação etc.

String s = str1.replaceAll("^\\s+","");//starting with whitespace one or more

Agora, se você deseja dividir por espaço ou qualquer caractere especial.

String[] sa = s.split("[^\\w]+");//split by any non word char

Mas como w contém [a-zA-Z_0-9], se você deseja dividir por sublinhado (_), use

 String[] sa = s.split("[!,? ._'@]+");//for str2 after removing leading space

Isso replaceAll("^\\s+","")salvou o meu dia. Isso funcionou para o meu caso. Obrigado
Kostas Asargiotakis

2

Exemplo muito simples abaixo:

Espero que ajude.

String str = "Hello I'm your String";
String[] splited = str.split(" ");
var splited = str.split(" ");
var splited1=splited[0]; //Hello
var splited2=splited[1]; //I'm
var splited3=splited[2]; //your
var splited4=splited[3]; //String

1

você pode separar as cordas usando o código abaixo

   String thisString="Hello world";

   String[] parts = theString.split(" ");

   String first = parts[0];//"hello"

    String second = parts[1];//"World"

0

Aqui está um método para aparar uma String que possui um espaço em branco "," ou

private String shorterName(String s){
        String[] sArr = s.split("\\,|\\s+");
        String output = sArr[0];

        return output;
    }

0

Como já faz um tempo desde que essas respostas foram postadas, aqui está outra maneira mais atual de fazer o que é pedido:

List<String> output = new ArrayList<>();
try (Scanner sc = new Scanner(inputString)) {
    while (sc.hasNext()) output.add(sc.next());
}

Agora você tem uma lista de strings (o que é sem dúvida melhor que um array); se você precisar de uma matriz, poderá fazeroutput.toArray(new String[0]);


0

Não apenas espaço em branco, mas minha solução também resolve os caracteres invisíveis.

str = "Hello I'm your String";
String[] splited = str.split("\p{Z}");

-1

Simples de cuspir string por espaço

    String CurrentString = "First Second Last";
    String[] separated = CurrentString.split(" ");

    for (int i = 0; i < separated.length; i++) {

         if (i == 0) {
             Log.d("FName ** ", "" + separated[0].trim() + "\n ");
         } else if (i == 1) {
             Log.d("MName ** ", "" + separated[1].trim() + "\n ");
         } else if (i == 2) {
             Log.d("LName ** ", "" + separated[2].trim());
         }
     }
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.