Foros del Web » Programación para mayores de 30 ;) » Java »

Dividir un string el trozos

Estas en el tema de Dividir un string el trozos en el foro de Java en Foros del Web. Para dividir un string en trozos he estado intentando hacerlo mediante stringtokenizer pero tengo el siguiente problema Mi codigo es: Código: String cadena = "createtablacreada"; ...
  #1 (permalink)  
Antiguo 01/03/2007, 13:36
 
Fecha de Ingreso: diciembre-2006
Mensajes: 31
Antigüedad: 17 años, 4 meses
Puntos: 0
Dividir un string el trozos

Para dividir un string en trozos he estado intentando hacerlo mediante stringtokenizer pero tengo el siguiente problema

Mi codigo es:

Código:
String cadena = "createtablacreada";
		
		StringTokenizer tokens = new StringTokenizer(cadena, "create");
	
		
		
		while (tokens.hasMoreTokens())
		{
			String cacho = tokens.nextToken();
			
			
			if (cadena.equals(cacho))
			{
			//si son iguales no se ha producido un nuevo token
			System.out.println("Son iguales las dos: "+ cadena +" y " + cacho);
		
			}
			else
			{
				//Sí es de los create y la inserto en la lista
			System.out.println("Son distintas las dos: "+ cadena +" y " + cacho);
			}
		}

Yo quiero que me de solo tablacreada, pero me divide la cadena tambien cuando encuentra algo que se asemeja lo mas minimo al delimitador que le pogo.

En este ejemplo que devolveria:

Son distintas las dos: createtablacreada y bl

Son distintas las dos: createtablacreada y d

¿como se puede hacer?

muchas gracias.
  #2 (permalink)  
Antiguo 01/03/2007, 14:28
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Dividir un string el trozos

1) La clase StringTokenizer no está recomendada a partir de la version 1.4 de Java, recomendando en su lugar usar otras tecnicas como el paquete regex o el split de la clase String. Está un poco escondido en los javadoc pero ahí lo dice. No preguntes donde que si no te lo echaran en cara largo y tendido.

2) En todo caso, el API de StringTokenizer dice:
Código:
public StringTokenizer(String str,String delim)
    Constructs a string tokenizer for the specified string. The characters in the delim argument are the delimiters for separating tokens. Delimiter characters themselves will not be treated as tokens.
Así que estas usando como delimitadores 'c', 'r', 'e', 'a', 't' y 'e' en vez de la cadena completa. StringTokenizer no acepta cadenas como delimitadores, así que tendrá que ser a base de expresiones regulares.

S!
  #3 (permalink)  
Antiguo 01/03/2007, 15:36
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Dividir un string el trozos



Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 02/03/2007, 05:53
Den
 
Fecha de Ingreso: febrero-2007
Mensajes: 6
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Dividir un string el trozos

puedes dividir un String en trozos sin el StringTokenizer a pelo.
utiliza una variable indexadora para el string y compruebas caracter a caracter con "<nombreDelString>.charAt(int posicion)" hasta encontrar el caracter que busques y a continuacion
con el metodo ".subString(int posicionDeInicio,int numPosicionesSiguientes )"
coges el cacho que te interese;

...

String cadena={"hola"}
cadena.charAt(0);//consigues el 1º caracter de lacadena,guardada en un tipo char.
cadena.subString(0,1); //esto deberia sr el caracter h guardado en un String.

...

ahora mismo no estoy seguro de si la primera posicion de los arrays es el 0 o el uno, pero tu prueba, espero k te sea de ayuda
  #5 (permalink)  
Antiguo 02/03/2007, 11:13
 
Fecha de Ingreso: diciembre-2006
Mensajes: 31
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Dividir un string el trozos

Muchas gracias por vuestras respuestas, con la clase regex no he tenido problemas para hacer lo que queria.

Nuevamente gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:03.