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

problema con StringTokenizer

Estas en el tema de problema con StringTokenizer en el foro de Java en Foros del Web. hola, tengo un problema y he visitado página sy todo y he logrado hacer cosas básicas con StringTokenizer pero ahora estoy en algo más complejo ...
  #1 (permalink)  
Antiguo 23/03/2008, 19:51
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
problema con StringTokenizer

hola, tengo un problema y he visitado página sy todo y he logrado hacer cosas básicas con StringTokenizer pero ahora estoy en algo más complejo y un amigo me dijo que con esto mismo se podía, pero que ni él sabía como.

Tengo un archivo de texto de la siguiente forma:

titulo:Titulo de la página
cuerpo:aca va el cuerpo del texto
cantidad:1
vinculo1:www.google.cl
nomvinculo1:Google

el archivo de texto es así tal cual, pero lo que necesito sacar de ese archivo son solos los valores:

Titulo de la página
aca va el cuerpo del texto
1
www.google.cl
Google

y esos datos que saco colocarlos en variables distintas, lo que podría ser un array.
array[0] = "Titulo de la página";
array[1] = "aca va el cuerpo del texto";
array[2] = "1";
array[3] = "www.google.cl";
array[4] = "Google";

obviamente no lo puedo hacer asi ya que el programa que estoy haciendo son variables que se van a ir preguntando, por lo que el titulo de la pagina depende de lo que escriba la persona, lo mismo con el cuerpo, el enlace, etc... esos datos son un ejemplo menos el texto estatico:

titulo:
cuerpo:
cantidad:
vinculo1:
nomvinculo1:

si se fijan quiero extraer los contenidos despues de los :, pero me dijeron que tenía que usar StringTokenizer e ir separandolos por estas palabras:

titulo:
cuerpo:
cantidad:
vinculo1:
nomvinculo1:

pense que en colocar cada uno en un array y hacer correr un for, pero me deja una embarrada gigante.

algo como esto:

String[] linea = new String[6];
linea[0] = "titulo:";
linea[1] = "encabezado:";
linea[2] = "cuerpo:";
linea[3] = "cantidad:";
linea[4] = "vinculo1:";
linea[5] = "nomvinculo1:";

// while o for.. igual no me resulta

int i = 0;
while(i<=5){
StringTokenizer tokens = new StringTokenizer(txt,linea[i]);
System.out.println(tokens.nextToken());
i++;
}

no se si alguien podría ayudarme con esto por favor.
__________________
Rodrigo Lopez
  #2 (permalink)  
Antiguo 24/03/2008, 02:47
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Re: problema con StringTokenizer

Hola,

Cita:
Iniciado por rodrigo_lopez Ver Mensaje
... con StringTokenizer pero ahora estoy en algo más complejo ...
Tal ves StringTokenizer no sea la mejor solución en este caso, en el cual vas leyendo linea a linea.

Cita:
Iniciado por rodrigo_lopez Ver Mensaje
... Tengo un archivo de texto de la siguiente forma: ...
Es un archivo.
Creo que sería más sencillo con el objeto String. (jdk 1.4+)
No necesitarías un objeto más y puede usar "regular expressions".
(":\\s" ==> dos puntos seguidos de 0 o más espacios).

Código:
    BufferedReader b = new BufferedReader(new FileReader("texto.txt"));
    String line; String[] lines = new String[MAX]; int i = 0;

    while (((line = b.readLine()) != null) && i < MAX) {
      // La versión con stringTokenizer
      // StringTokenizer t = new StringTokenizer(line, ":");
      // t.nextToken(); lines[i] = t.nextToken();
      lines[i] = line.split(":\\s*")[1];
      System.out.println(lines[i++]);
    }

    b.close();
Saludos,

Última edición por HackmanC; 24/03/2008 a las 03:15 Razón: edit
  #3 (permalink)  
Antiguo 24/03/2008, 06:15
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Re: problema con StringTokenizer

Si, lo que pasa es que no puedo separar los textos por : ( doble punto ) ya que el usuario puede ingresar eso en una variable como en el :

array[1] = "aca va el cuerpo del texto";

podría el usuario colocar:
array[1] = "definicion de gato: el gato es un animal...etc...etc";

por eso debo separarlos por las palabras que antes mencionaba que no van a cambiar dentro del archivo de texto:

titulo:
cuerpo:
cantidad:
vinculo1:
nomvinculo1:

primero por titulo: , luego por cuerpo:, luego por cantidad:, etc...

Y es justamente eso lo que me complica ya que cada split sería distinto, pero me dijeron que lo hiciera con StringTokenizer
__________________
Rodrigo Lopez
  #4 (permalink)  
Antiguo 24/03/2008, 11:29
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: problema con StringTokenizer

¿Y no basta con coger, desde el primer ":" hasta el final de linea?

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 24/03/2008, 11:55
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Re: problema con StringTokenizer

Hola,

Cita:
Iniciado por rodrigo_lopez Ver Mensaje
.. lo que pasa es que no puedo separar los textos por : ( doble punto ) ya que el usuario puede ingresar eso en una variable como en el ...
Tal ves sigue siendo la mejor opción "split".

Código:
 BufferedReader b = new BufferedReader(new FileReader("texto.txt"));
    String line; String[] lines = new String[MAX]; int i = 0;
 
    while ((line = b.readLine()) != null) {
      // Creo que la sintaxis correcta en Java RegEx es ^(d1, d2, d3)  como Perl
      // y sed; pero podría estar equivocado y ser (^d1, ^d2, ^d3)
      String[] t = line.split("^(titulo:|cuerpo:|cantidad:|vinculo1:|nomvinculo1:)");
      if (i < MAX && t.length > 1)
        System.out.println(lines[i++] = t[1]);
    }
 
    b.close(); 
Según lo que entendí de tu mensaje, el archivo está ordenado:

Código:
titulo:Titulo de la página
cuerpo:aca va el cuerpo del texto
cantidad:1
esta no es una linea
vinculo1:www.google.cl
otracosa: vinculo1: esto no es una linea
otracosa:esto no es una linea:otracosa:
nomvinculo1:Google
No tengo idea de como hacerlo con StringTokenizer sin hacer una "embarrada" ¿?; en el caso del StringTokenizer habría que validar cada línea del texto contra cada línea de prueba -- String[] v = {"titulo", "cuerpo", "cantidad", "vinculo1:", "nomvinculo1"}; -- o llevar una serie de contadores.

Espero que haya sido de ayuda,
Si tu objeto es hacerlo con StringTokenizer forzosamente, comienza a pensar en la "embarrada" ¿?.

Saludos,

pd:

Me faltó mencionar 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.

http://java.sun.com/j2se/1.4.2/docs/...Tokenizer.html

Última edición por HackmanC; 24/03/2008 a las 14:09 Razón: edit
  #6 (permalink)  
Antiguo 25/03/2008, 08:32
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Re: problema con StringTokenizer

O.o HackmanC me ayudó mucho tu ejemplo, lo que aún no entiendo muy bien de tu código es la parte del if.

System.out.println(lines[i++] = t[1]);

¿¿ en que array estaría guardando cada dato? titulo, encabezado, cuerpo del mensaje, etc... ??? en lines[0], [1], [2] ??
__________________
Rodrigo Lopez
  #7 (permalink)  
Antiguo 25/03/2008, 22:40
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Re: problema con StringTokenizer

ya lo solucioné gracias.
__________________
Rodrigo Lopez
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 18:17.