Como dividir uma string separada por vírgula?


202

Eu tenho uma String com um comprimento desconhecido que se parece com isso

"dog, cat, bear, elephant, ..., giraffe"

Qual seria a maneira ideal de dividir essa sequência de vírgulas para que cada palavra se tornasse um elemento de um ArrayList?

Por exemplo

List<String> strings = new ArrayList<Strings>();
// Add the data here so strings.get(0) would be equal to "dog",
// strings.get(1) would be equal to "cat" and so forth.

1
use o método split ("char de divisão") divide sua string e o método cria uma string com palavras divididas.
Simon Dorociak

Respostas:


343

Você pode fazer isso:

String str = "...";
List<String> elephantList = Arrays.asList(str.split(","));

Basicamente, o .split()método dividirá a string de acordo com o delimitador (neste caso) que você está passando e retornará uma matriz de strings.

No entanto, você parece estar atrás de uma Lista de seqüências de caracteres em vez de uma matriz, portanto, a matriz deve ser transformada em uma lista usando o Arrays.asList()utilitário Assim como um FYI, você também pode fazer algo assim:

String str = "...";
ArrayList<String> elephantList = new ArrayList<>(Arrays.asList(str.split(","));

Mas geralmente é uma prática melhor programar para uma interface do que para uma implementação concreta real, então eu recomendaria a 1ª opção.


9
Tenha em mente que esta não vai cortar os valores de modo strings.get (1) será "gato" não "gato"
Alb

45
str.splitaceita regex para que você possa usar str.split(",[ ]*");para remover vírgulas e espaços após vírgulas.
Vertti

4
Um arquivo delimitado por vírgula (csv) pode ter uma vírgula entre aspas, o que significa que não é um delimitador. Nesse caso, o Split não funcionará.
Steven Trigg

2
A segunda opção requer como conversão para ArrayList<String>.
C_B 28/08

3
Se você precisa para manter as entradas vazias (eg.for comprimento da matriz consistente) uso split ( "", - 1) como por stackoverflow.com/questions/14602062/...
Rápido Engy

157

Bem, você quer dividir , certo?

String animals = "dog, cat, bear, elephant, giraffe";

String[] animalsArray = animals.split(",");

Se você quiser se livrar adicionalmente de espaços em branco ao redor dos itens:

String[] animalsArray = animals.split("\\s*,\\s*");

Sim, isso faz parte da solução. O OP parece estar após uma Lista de Strings, não uma matriz.
Npinti 17/05

@ npinti: sim, +1 para você, você foi mais rápido e eu não queria copiar seu Arrays.asList()idioma.
Tomasz Nurkiewicz

1
Fiquei pensando por 10 horas, depois procurei SO. não sabia que é tão fácil .split ();
DeathRs

E se você gostaria de armazenar os itens divididos resultantes em um conjunto, em vez de em uma matriz?
Moses Kirathe 11/0318

29

Você pode dividir e criar uma matriz e acessar como matriz

String names = "prappo,prince";
String[] namesList = names.split(",");

você pode acessar como

String name1 = namesList [0];
String name2 = namesList [1];

ou usando loop

for(String name : namesList){
System.out.println(name);
}

espero que ajude você.


18

Uma pequena melhoria: as soluções acima não removerão espaços iniciais ou finais na String real. É melhor chamar corte antes de chamar divisão. Em vez disso,

 String[] animalsArray = animals.split("\\s*,\\s*");

usar

 String[] animalsArray = animals.trim().split("\\s*,\\s*");

1
para sua segunda linha, se usarmos trim (), não precisaremos dividir espaço, pois ("\\s*,\\s*")basta usar (",");os resultados.
WIZARD

5
Não tenho certeza disso @WIZARD porque o trim remove apenas o espaço esquerdo e direito da string, mas não o espaço nela. Então o trim(" string, with , space ")será "string, with , space".
Thomas Leduc

@ThomasLeduc se string é assim "dog, cat, bear, elephant, giraffe", então não precisa de trim()e no caso ur se o uso trim(), em seguida, colocar para fora será "string,with,space"não este"string, with , space"
WIZARD

trim()irá remover todos os espaços não apenas para a esquerda e direita espaço de corda
WIZARD

5
Você testa isso? porque acabei de escrever um programa java e a string " string, with , space ".trim()retorna "string, with , space". Como javadoc diz: retorna uma cópia da string, com espaços em branco à esquerda e à direita omitidos. Você está errado e @ user872858 está certo.
Thomas Leduc

3

Primeiro você pode dividir nomes como este

String animals = "dog, cat, bear, elephant,giraffe";

String animals_list[] = animals.split(",");

Acessar seus animais

String animal1 = animals_list[0];
String animal2 = animals_list[1];
String animal3 = animals_list[2];
String animal4 = animals_list[3];

E você também deseja remover espaços em branco e vírgula em torno de nomes de animais

String animals_list[] = animals.split("\\s*,\\s*");

3

Para ser completo, usando a biblioteca Guava , você deve: Splitter.on(",").split(“dog,cat,fox”)

Outro exemplo:

String animals = "dog,cat, bear,elephant , giraffe ,  zebra  ,walrus";
List<String> l = Lists.newArrayList(Splitter.on(",").trimResults().split(animals));
// -> [dog, cat, bear, elephant, giraffe, zebra, walrus]

Splitter.split()retorna um iterável; portanto, se você precisar de uma lista, envolva-a Lists.newArrayList()como acima. Caso contrário, basta ir com o Iterable, por exemplo:

for (String animal : Splitter.on(",").trimResults().split(animals)) {
    // ...
}

Observe como trimResults()lida com todas as suas necessidades de corte sem precisar ajustar as expressões regulares para caixas de canto , como acontece com String.split().

Se o seu projeto já usa o Guava, essa deve ser a sua solução preferida. Consulte a documentação do Splitter no Guava User Guide ou os javadocs para obter mais opções de configuração.


2

Pode tentar com isso funcionou para mim

 sg = sg.replaceAll(", $", "");

se não

if (sg.endsWith(",")) {
                    sg = sg.substring(0, sg.length() - 1);
                }

1

no build.gradle adicione Guava

    compile group: 'com.google.guava', name: 'guava', version: '27.0-jre'

e depois

    public static List<String> splitByComma(String str) {
    Iterable<String> split = Splitter.on(",")
            .omitEmptyStrings()
            .trimResults()
            .split(str);
    return Lists.newArrayList(split);
    }

    public static String joinWithComma(Set<String> words) {
        return Joiner.on(", ").skipNulls().join(words);
    }

desfrutar :)


0

Remova todos os espaços em branco e crie uma lista de tamanho fixo ou imutável (consulte os asList documentos da API )

final String str = "dog, cat, bear, elephant, ..., giraffe";
List<String> list = Arrays.asList(str.replaceAll("\\s", "").split(","));
// result: [dog, cat, bear, elephant, ..., giraffe]

Também é possível usar, replaceAll(\\s+", "")mas a eficiência máxima depende do caso de uso. (consulte a resposta do @GurselKoca para Remover espaços em branco das strings em Java )


0

Você pode usar algo como isto:

String animals = "dog, cat, bear, elephant, giraffe";

List<String> animalList = Arrays.asList(animals.split(","));

Além disso, você incluiria as bibliotecas:

import java.util.ArrayList;
import java.util.Arrays; 
import java.util.List;


0

Em Kotlin,

val stringArray = commasString.replace(", ", ",").split(",")

onde stringArrayestá List<String>e commasStringestá Stringcom vírgulas e espaços


0

Essa é uma maneira fácil de dividir uma string por vírgula,

import java.util.*;

public class SeparatedByComma{
public static void main(String []args){
     String listOfStates = "Hasalak, Mahiyanganaya, Dambarawa, Colombo";
     List<String> stateList = Arrays.asList(listOfStates.split("\\,"));
     System.out.println(stateList);
 }
}

Este código eu usei para o JDK. E se você precisar imprimir a matriz. use System.out.println
Sandun Susantha

-1

Existe uma função chamada replaceAll()que pode remover todos os espaços em branco, substituindo-os pelo que você quiser. Como um exemplo

String str="  15. 9 4;16.0 1"
String firstAndSecond[]=str.replaceAll("\\s","").split(";");
System.out.println("First:"+firstAndSecond[0]+", Second:"+firstAndSecond[1]);

Darei à você:

First:15.94, Second:16.01
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.