2012-07-30 17 views
33

Me gustaría saber cómo dividir una cadena grande en una serie de cadenas o palabras más pequeñas. Por ejemplo:División de cadenas en palabras individuales Java

Quiero pasear a mi perro.

Quiero tener una cadena: "I", otra cadena: "want", etc.

¿Cómo voy a hacer esto?

+2

Por favor, muestre * qué * ha intentado (¿buscó la palabra "split" en los documentos para String, por ejemplo?) –

+9

Sí, String # split() tiene un nombre muy ambiguo :-P – maksimov

Respuesta

56

Uso split() método

Ej:

String s = "I want to walk my dog"; 

String[] arr = s.split(" ");  

for (String ss : arr) { 

     System.out.println(ss); 
    } 
+0

Cadena ya está definido? – fosho

+0

@fosho gracias ... fue un error tipográfico –

+13

Este método no eliminará las comas, los puntos, etc. de las palabras. – kazy

1

Uso split()

String words[] = stringInstance.split(" "); 
+0

lo que debe Importa? – fosho

+2

nada

+1

Por favor, vaya a través del enlace de la respuesta –

2

Puede utilizar split(" ") método de la clase String y puede obtener cada palabra código se indica a continuación:

String s = "I want to walk my dog"; 
String []strArray=s.split(" "); 
for(int i=0; i<strArray.length;i++) { 
    System.out.println(strArray[i]); 
} 
2

Sin embargo, otro método, utilizando StringTokenizer:

String s = "I want to walk my dog"; 
StringTokenizer tokenizer = new StringTokenizer(s); 

while(tokenizer.hasMoreTokens()) { 
    System.out.println(tokenizer.nextToken()); 
} 
+0

¡ah! esto es bueno en caso de que no necesite una matriz pero no tokenizer devuelve una matriz de token? buena idea, aunque –

+0

No, no se está produciendo ninguna matriz. 'StringTokenizer' busca los tokens consecutivos en la cadena y los devuelve uno por uno. – Kao

+0

Buena solución, desafortunadamente, StringTokenizer ya no se debe usar. De los documentos: StringTokenizer es una clase heredada que se conserva por razones de compatibilidad aunque su uso se desaconseja en el nuevo código. Se recomienda que cualquiera que busque esta funcionalidad use el método de división de String o el paquete java.util.regex en su lugar. – Tomor

19

una expresión regular también se puede utilizar para separar palabras. \ W se puede utilizar para que coincida con caracteres de palabra ([A-Za-z0-9_]), de manera que se elimina de puntuacion de los resultados:

String s = "I want to walk my dog, and why not?"; 
Pattern pattern = Pattern.compile("\\w+"); 
Matcher matcher = pattern.matcher(s); 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 

Salidas:

I 
want 
to 
walk 
my 
dog 
and 
why 
not 

Ver Java documentación de la API para Pattern

+0

¿Esto produce palabras vacías? –

35

Como una solución más general (! pero sólo ASCII), para incluir cualquier otro separadores entre palabras (como comas y puntos y comas), sugiero:

String s = "I want to walk my dog, cat, and tarantula; maybe even my tortoise."; 
String[] words = s.split("\\W+"); 

La expresión regular significa que los delimitadores serán cualquier cosa que no sea una palabra [\ W], en grupos de al menos uno [+]. Como [+] es codicioso, tomará por ejemplo ';' y '' juntos como un delimitador.

+4

\\ W solo parece considerar caracteres alfabéticos ASCII. No es adecuado para idiomas con acentos. – rghome

+0

¡Gracias por señalar eso! Cambió la respuesta en consecuencia. –

3

Ver mis other answer caracteres si su frase contiene acentúa:

String[] listeMots = phrase.split("\\P{L}+"); 
+1

Esta es la mejor respuesta. – rghome

0

para incluir cualquier separadores entre palabras (como todo excepto todo en minúsculas y mayúsculas), que podemos hacer:

String mystring = "hi, there,hi Leo"; 
String[] arr = mystring.split("[^a-zA-Z]+"); 
for(int i = 0; i < arr.length; i += 1) 
{ 
    System.out.println(arr[i]); 
} 

Aquí la expresión regular significa que los separadores serán cualquier cosa que no sea una letra mayúscula o minúscula [^a-zA-Z], en grupos de al menos uno [+].

Cuestiones relacionadas