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.

safári
fonte
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!

corsiKa
fonte
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+");
GaspardP
fonte
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+");
rbrtl
fonte
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

sandeep vanama
fonte
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;
    }
Muhammad Suleman
fonte
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);
sachin pangare
fonte
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

gjain
fonte
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
Anuj Kumar Soni
fonte
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
BaxD
fonte
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"
Syed Danish Haider
fonte
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;
    }
MrG
fonte
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]);

daniu
fonte
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}");
logbasex
fonte
-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());
         }
     }
Jaydeep Dobariya
fonte