Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Dividir cadena

Hola
Estoy haciendo uans pruebas a dividir una cadena y no doy con el secreto
imaginaros que quiero trocear esta cadena:
afasdf|asfasdf|asdfasdfasd || hjh
por las pipes (|) y me tendrian que salir 5 trozos, uno de ellos vacio.
para ello he hecho:
StringTokenizer tokens=new StringTokenizer("afasdf|asfasdf|asdfasdfasd || hjh ", "|");
int nDatos=tokens.countTokens();
String[] datos=new String[nDatos];
int i=0;
while(tokens.hasMoreTokens()){
datos[i]=tokens.nextToken().trim();
i++;
}

pero no consigo sacar 5 trozos.
Me podeis ayudar?

Gracias

abril 26, 2012 | Unregistered CommenterZatopek

String[] splitted = "afasdf|asfasdf|asdfasdfasd || hjh ".split("\\|");
for (String item : splitted) {
System.out.println(item);
}

El problema es que antes del carácter | debes usar \\ para que lo interprete correctamente como un carácter de texto, y no como uno de control.

abril 26, 2012 | Registered Commenterchoces

El problema es que StringTokenizer interpreta dos o más separadores juntos como un único separador, por eso devuelve 4 partes en lugar de 5.
La función split de la clase String si interpreta correctamente la aparición de separadores juntos en la cadena.

abril 27, 2012 | Unregistered CommenterGarca

El método split de la clase String tampoco funciona correctamente, si no se usan los caracteres \\

De todos modos, StringTokenizer es una clase en desuso, obsoleta en la práctica, y sus propios Javadocs recomiendan que se reemplace por split

http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html

donde se afirma lo siguiente:

"StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead."

abril 29, 2012 | Registered Commenterchoces