¿Hay algún método incorporado en Java que nos permita convertir cadenas separadas por comas en algún contenedor (por ejemplo, matriz, lista o vector)? ¿O necesito escribir un código personalizado para eso?
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
java
string
collections
split
Jame
fuente
fuente
Respuestas:
Convertir cadena separada por comas en lista
El código anterior divide la cadena en un delimitador definido como:
zero or more whitespace, a literal comma, zero or more whitespace
que colocará las palabras en la lista y colapsará cualquier espacio en blanco entre las palabras y las comas.Tenga en cuenta que esto devuelve simplemente un contenedor en una matriz: NO PUEDE, por ejemplo, a
.remove()
partir del resultadoList
. Para un realArrayList
debe usar másnew ArrayList<String>
.fuente
\s
coincide con cualquier espacio en blanco,*
aplica la coincidencia cero o más veces. Entonces\s*
significa "hacer coincidir cualquier espacio en blanco cero o más veces". Buscamos esto antes y después de la coma. Por lo tanto, la división funcionará para cadenas como"item1 , item2 , item3"
, o"item1,item2 ,item3"
, etc. En Java, debe escapar de la barra diagonal inversa en cadenas, por lo que obtiene\\s*
"[\\s,]+"
para recortar espacios en blanco para los valores. Por ejemplo, se" item1 , item2 , item3 , "
convierte["item1", "item2", "item3"]
."[\\s,]+"
también se dividirá en el espacio interno dentro de un token separado por comas, tratará ambos espacios en blanco como un delimitador incluso cuando no haya una coma, en lugar de una coma más cualquier número de espacios en blanco circundantes."\\s*(,\\s*)+"
recortará el espacio en blanco solo alrededor de los tokens separados por comas, y también ignorará cualquier cadena que sea solo un espacio en blanco o vacío.Arrays.asList
devuelve un tamaño fijoList
respaldado por la matriz. Si desea una mutable normaljava.util.ArrayList
, debe hacer esto:O, usando guayaba :
El uso de
Splitter
le brinda más flexibilidad en la forma de dividir la cadena y le permite, por ejemplo, omitir cadenas vacías en los resultados y recortar resultados. También tiene un comportamiento menos extraño queString.split
, además de no requerir que se divida por expresiones regulares (esa es solo una opción).fuente
Arrays.asList
proporciona un contenedor alrededor de la matriz nativa (evitando una copia del elemento),new ArrayList(...)
hará exactamente ese elemento por copia del elemento. Probablemente deberíamos preferir un enfoque que permita agregar elementos analizados directamente a la colección de destino deseada.Dos pasos:
String [] items = commaSeparated.split("\\s*,\\s*");
List<String> container = Arrays.asList(items);
fuente
split
se interpreta como un RegEx.Aquí hay otro para convertir CSV a ArrayList:
Te imprime
fuente
Si a
List
es el objetivo final como lo indicó el OP, entonces la respuesta ya aceptada sigue siendo la más corta y la mejor. Sin embargo, quiero proporcionar alternativas utilizando Java 8 Streams , que le darán más beneficios si es parte de una tubería para su posterior procesamiento.Al ajustar el resultado de la función .split (una matriz nativa) en una secuencia y luego convertirla en una lista.
Si es importante que el resultado se almacene según
ArrayList
el título del OP, puede usar unCollector
método diferente :O mediante el uso de la API de análisis RegEx:
Tenga en cuenta que aún podría considerar dejar la
list
variable escrita como enList<String>
lugar deArrayList<String>
. La interfaz genérica paraList
todavía parece bastante similar a laArrayList
implementación.Por sí mismos, estos ejemplos de código no parecen agregar mucho (excepto más tipeo), pero si planea hacer más, como esta respuesta en la conversión de una Cadena a una Lista de Longs , la API de transmisión es realmente poderosa al permitir para canalizar sus operaciones una tras otra.
Por el bien, ya sabes, la integridad.
fuente
fuente
collect(toList())
acollect(Collectors.toList()
collect(toList())
está utilizando la importación estática deCollectors.toList()
para brevedad y fluidez :)No hay un método incorporado para esto, pero simplemente puede usar el método split () en esto.
fuente
Eso debería funcionar para ti.
fuente
puedes combinar asList y split
fuente
Este código te ayudará,
fuente
Puede usar Guava para dividir la cadena y convertirla en una ArrayList. Esto también funciona con una cadena vacía y devuelve una lista vacía.
produce lo siguiente:
fuente
Un ejemplo usando
Collections
.fuente
Hay muchas maneras de resolver esto usando secuencias en Java 8, pero en mi opinión, los siguientes revestimientos son sencillos:
fuente
Primero puede dividirlos usando
String.split(",")
, y luego convertir la cadena devueltaarray
a unArrayList
usoArrays.asList(array)
fuente
En groovy, puedes usar el método tokenize (Token de personaje):
fuente
El mismo resultado que puede lograr con la clase Splitter.
(escrito en kotlin)
fuente
fuente
Usualmente uso un patrón precompilado para la lista. Y también esto es un poco más universal ya que puede considerar paréntesis que siguen algunas de las expresiones listToString.
fuente
En Kotlin, si su lista de cadenas como esta y puede usar para convertir cadenas a ArrayList, use esta línea de código
fuente
fuente
Puedes hacerlo de la siguiente manera.
Esto elimina el espacio en blanco y se divide por comas donde no necesita preocuparse por los espacios en blanco.
fuente
Cadena -> Conversión de colección : (Cadena -> Cadena [] -> Colección)
Colección -> Cadena [] conversión:
Cadena -> Cadena de conversión [] :
Y Colección -> Colección :
fuente
Convierta la colección en cadena como se separó por comas en Java 8
El objeto listOfString contiene elementos ["A", "B", "C", "D"]
La salida es: - 'A', 'B', 'C', 'D'
Y convertir matriz de cadenas a lista en Java 8
fuente
fuente
ArrayList
? ¿Leíste la pregunta?ArrayList
. Retrocedí las ediciones a la primera revisión (para que pueda verlo) y mejoré el formato de la primera revisión.