¿Cómo dividir una cadena separada por comas?


202

Tengo una cadena con una longitud desconocida que se parece a esto

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

¿Cuál sería la forma óptima de dividir esta cadena en las comas para que cada palabra se convierta en un elemento de una ArrayList?

Por ejemplo

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 el método split ("spliting char") divide su cadena y el método creará una matriz de cadenas con palabras divididas.
Simon Dorociak

Respuestas:


343

Podrías hacer esto:

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

Básicamente, el .split()método dividirá la cadena de acuerdo con el delimitador (en este caso) que está pasando y devolverá una matriz de cadenas.

Sin embargo, parece que está detrás de una Lista de cadenas en lugar de una matriz, por lo que la matriz debe convertirse en una lista mediante la Arrays.asList()utilidad. Al igual que para su información, también podría hacer algo así:

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

Pero generalmente es una mejor práctica programar en una interfaz en lugar de una implementación concreta real, por lo que recomendaría la primera opción.


9
Tenga en cuenta que esto no recortará los valores, por lo que strings.get (1) será "cat" no "cat"
Alb

45
str.splitacepta expresiones regulares para que pueda usar str.split(",[ ]*");para eliminar comas y espacios después de las comas.
vertti

44
Un archivo delimitado por comas (csv) podría tener una coma entre comillas, lo que significa que no es un delimitador. En este caso, Split no funcionará.
Steven Trigg

2
La segunda opción requiere que se lance a ArrayList<String>.
C_B

3
Si necesita mantener entradas vacías (por ejemplo, para una longitud de matriz consistente) use split (",", - 1) según stackoverflow.com/questions/14602062/…
Fast Engy

157

Bueno, quieres dividirte , ¿verdad?

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

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

Si además desea eliminar los espacios en blanco alrededor de los elementos:

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

Sí, eso es parte de la solución. El OP parece estar detrás de una Lista de cadenas, no una matriz.
npinti

@npinti: sí, +1 para ti, fuiste más rápido y no quería copiar tu Arrays.asList()idioma.
Tomasz Nurkiewicz

1
Seguí pensando durante 10 horas, luego busqué SO. no sabía que es tan fácil .split ();
DeathRs

¿Qué sucede si desea almacenar los elementos divididos resultantes en un conjunto en lugar de en una matriz?
Moses Kirathe

29

Puede dividirlo y hacer una matriz y luego acceder como matriz

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

puedes acceder como

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

o usando el bucle

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

Espero que te ayude .


18

Una pequeña mejora: las soluciones anteriores no eliminarán los espacios iniciales o finales en la Cadena real. Es mejor llamar a trim antes de llamar a split. En lugar de esto,

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

utilizar

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

1
para su segunda línea, si usamos trim (), entonces no necesitamos dividir el espacio, ("\\s*,\\s*")solo use (",");esto resultará igual.
MAGO

55
No estoy seguro de eso @WIZARD porque el recorte elimina solo el espacio izquierdo y derecho de la cadena, pero no el espacio en él. Así trim(" string, with , space ")será el "string, with , space".
Thomas Leduc

@ThomasLeduc si la cadena es así, "dog, cat, bear, elephant, giraffe"entonces no es necesario trim()y, en su caso, si se usa trim(), la salida "string,with,space"no será esto"string, with , space"
MAGO

trim()eliminará todos los espacios, no solo el espacio izquierdo y derecho de la cadena
WIZARD

55
¿Lo pruebas? porque acabo de escribir un programa java y la cadena de " string, with , space ".trim()retorno "string, with , space". Como dice javadoc: devuelve una copia de la cadena, con espacios en blanco iniciales y finales omitidos. Estás equivocado y @ user872858 tiene razón.
Thomas Leduc

3

Primero puedes dividir nombres como este

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

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

para acceder a tus animales

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

Y también desea eliminar espacios en blanco y comas alrededor de los nombres de los animales

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

3

Para completar, usando la biblioteca Guava , harías: Splitter.on(",").split(“dog,cat,fox”)

Otro ejemplo:

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()devuelve un Iterable, por lo que si necesita una Lista, envuélvala como se indica Lists.newArrayList()arriba. De lo contrario, simplemente vaya con el Iterable, por ejemplo:

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

Tenga en cuenta cómo trimResults()maneja todas sus necesidades de recorte sin tener que ajustar expresiones regulares para las esquinas , como con String.split().

Si su proyecto ya usa guayaba, esta debería ser su solución preferida. Consulte la documentación de Splitter en la Guía del usuario de Guava o los javadocs para obtener más opciones de configuración.


2

Puede intentar con esto funcionó para mí

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

si no

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

1

en build.gradle agregue guayaba

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

y entonces

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

disfruta :)


0

Elimine todos los espacios en blanco y cree una lista de tamaño fijo o inmutable (consulte los asList documentos de la API )

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

También es posible usarlo, replaceAll(\\s+", "")pero la eficiencia máxima depende del caso de uso. (consulte la respuesta de @GurselKoca para eliminar espacios en blanco de cadenas en Java )


0

Puedes usar algo como esto:

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

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

Además, incluirías las librerías:

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

0

Utilizar este :

        List<String> splitString = (List<String>) Arrays.asList(jobtype.split(","));

0

En Kotlin

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

donde stringArrayes List<String>y commasStringes Stringcon comas y espacios


0

Esta es una manera fácil de dividir cadenas por comas,

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 lo usé para JDK. Y si necesita imprimir la matriz. use System.out.println
Sandun Susantha

-1

Hay una función llamada replaceAll()que puede eliminar todos los espacios en blanco reemplazándolos con lo que desee. Como ejemplo

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

Te regalaré:

First:15.94, Second:16.01
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.