2012-05-17 26 views
145

que tienen una cadena con una longitud desconocida que se ve algo como esto¿Cómo dividir una cadena separada por comas?

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

¿Cuál sería la mejor manera de dividir esta cadena en las comas por lo que cada palabra puede convertirse en un elemento de un 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 method split ("spliting char") divide su método de string nad creará string-array con palabras divididas. – Sajmon

Respuesta

237

Usted puede hacer esto:

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

Básicamente el método .split() será dividir la cadena de acuerdo con (en este caso) delimitador está de paso y devolver una matriz de instrumentos de cuerda.

Sin embargo, parece que busca una lista de cadenas en lugar de una matriz, por lo que la matriz debe convertirse en una lista mediante la utilidad Arrays.asList(). Así como un FYI también se podría hacer algo así:

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

pero es generalmente mejor práctica para programar a una interfaz en lugar de a una implementación real de hormigón, por lo que recomiendo la primera opción.

+0

@JamesFazio: El método '.split' es uno de los métodos más útiles en la clase String, le recomendaría que revise el enlace para los JavaDocs que he incluido en mi respuesta;). – npinti

+0

¡Gracias por la respuesta muy completa! –

+9

Tenga en cuenta que esto no recortará los valores para que strings.get (1) sea "cat" no "cat" – Alb

124

Bueno, quieres dividir, ¿verdad?

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

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

Si quiere, además, deshacerse de los espacios en blanco alrededor de los elementos:

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

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

+0

@npinti: sí, +1 para ti, fuiste más rápido y no quería copiar tu expresión 'Arrays.asList()'. –

+8

+1 gran punto acerca de la eliminación de espacios en blanco. – HDave

17

Una pequeña mejora: por encima de soluciones no quitar espacios iniciales o finales en la cadena real. Es mejor llamar trimado antes de llamar a split. En lugar de esto,

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

uso

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

para nuestra segunda línea, si usamos trim() entonces no necesitamos dividir el espacio como '(" \\ s *, \\ s * ")' solo use '(", ");' esto dará como resultado . –

+4

No estoy seguro de que @WIZARD elimine solo el espacio izquierdo y derecho de la cadena, pero no el espacio que contiene. Entonces el 'trim (" string, with, space ")' será '" string, with, space "'. –

+0

@ThomasLeduc si la cadena es así '" perro, gato, oso, elefante, jirafa "', entonces no es necesario 'trim()' y en su caso si usa 'trim()', entonces la cadena será '", with, space "' not this '" string, with, space "' –

3

primer lugar se puede dividir nombres como esto

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

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

para acceder a sus animales

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

Y también le quiera retirar espacios en blanco y coma alrededor de nombres de animales

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

Hay una función llamada replaceAll() que puede eliminar todos los espacios en blanco, reemplazándolos con lo que quieras.A modo de ejemplo

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

le dará:

First:15.94, Second:16.01 
2

Para completar, el uso de la biblioteca Guava, que haría: 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 en Lists.newArrayList() como arriba. De lo contrario sólo tiene que ir con el Iterable, por ejemplo:

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

Nota cómo trimResults() se ocupa de todas sus necesidades sin tener que recortar tweak regexes for corner cases, al igual que con String.split().

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

12

Se puede dividir y hacer una matriz continuación de acceso como matriz

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

se puede acceder como

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

o el uso de bucle

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

esperemos que le ayudará.

0

Retire todos los espacios en blanco y crear un de tamaño fijo oinmutable lista (véase asListAPI docs)

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

Es posible también utilizar replaceAll(\\s+", "") pero la máxima eficacia depende del caso de uso. (Ver @GurselKoca answer a Extracción de los espacios en blanco a partir de cadenas en Java)

0

se puede usar algo como esto:

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

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

Además, te incluyes las librerias:

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

puede intente con esto funcionó para mí

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

o bien

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