while - splits java




Como dividir uma string separada por vírgulas? (9)

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

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

Qual seria a melhor maneira de dividir essa string nas vírgulas para que cada palavra pudesse se tornar um elemento de uma 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.

Bem, você quer dividir , certo?

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

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

Se você quiser adicionalmente se livrar de espaços em branco em torno de itens:

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

Em Kotlin,

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

onde stringArray é List<String> e commasString é String com vírgulas e espaços


Para completar, usando a biblioteca Guava , você faria: 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 Iterable, então se você precisar de uma List, Lists.newArrayList() -a em 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() manipula todas as suas necessidades de corte sem precisar ajustar os regexes para casos de canto , como String.split() com String.split() .

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


Pode tentar com isso funcionou para mim

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

se não

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

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

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

É possível também usar replaceAll(\\s+", "") mas a eficiência máxima depende do caso de uso. (Veja @GurselKoca answer to Removendo espaço em branco de strings em Java )


Um pequeno aprimoramento: as soluções acima não removerão espaços iniciais ou finais na cadeia real. É melhor chamar o trim antes de chamar o split. Em vez disso,

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

usar

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

Você pode dividi-lo e fazer uma matriz, em seguida, 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 isso ajude você.


Você pode usar algo assim:

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

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

Além disso, você incluiria as libs:

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

em build.gradle add Goiaba

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

apreciar :)







split