¿Cuál es la mejor manera de hacer que stringTokenizer divida una línea de texto en variables predefinidas?

StackOverflow https://stackoverflow.com/questions/236387

  •  04-07-2019
  •  | 
  •  

Pregunta

No estoy seguro de si el título es muy claro, pero básicamente lo que tengo que hacer es leer una línea de texto de un archivo y dividirlo en 8 variables de cadena diferentes. Cada línea tendrá los mismos 8 fragmentos en el mismo orden (título, autor, precio, etc.). Entonces, para cada línea de texto, quiero terminar con 8 cadenas.

El primer problema es que los dos últimos campos de la línea pueden o no estar presentes, por lo que necesito hacer algo con stringTokenizer.hasMoreTokens, de lo contrario, morirá desordenadamente cuando los campos 7 y 8 no estén presentes.

Idealmente me gustaría hacerlo en un ciclo for for, pero no estoy seguro de cómo decirle a ese ciclo cuál será el orden de los campos para que pueda llenar las 8 (o 6) cadenas correctamente . ¡Por favor, dime que hay una mejor manera de usar 8 sentencias if anidadas!

EDITAR: la solución String.split parece definitivamente parte de ella, así que la usaré en lugar de stringTokenizer. Sin embargo, todavía no estoy seguro de cuál es la mejor manera de alimentar las cadenas individuales en el constructor. Sería la mejor manera de hacer que la clase esperara una matriz, y luego hacer algo como esto en el constructor:

line[1] = isbn;
line[2] = title;
¿Fue útil?

Solución

La mejor manera es no usar un StringTokenizer, sino usar el método split . Devuelve una matriz de cadenas, y puede obtener la longitud de eso.

Para cada línea en su archivo puede hacer lo siguiente:

String[] tokens = line.split("#");

tokens ahora tendrá 6 - 8 cadenas. Use tokens.length () para averiguar cuántos, luego cree su objeto a partir de la matriz.

Otros consejos

La expresión regular es el camino. Puede convertir su String entrante en una matriz de String utilizando el método de división

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split (java.lang.String)

¿Una expresión regular con grupos de captura funcionaría para usted? Ciertamente, puede hacer que partes de la expresión sean opcionales.

Una línea de datos de ejemplo o tres podría ser útil.

¿Es este un archivo CSV o similar por casualidad? Si es así, hay bibliotecas para ayudarlo, por ejemplo Apache Commons CSV (enlace a alternativas en su página también). Obtendrá una Cadena [] para cada línea en el archivo. Simplemente verifique el tamaño de la matriz para saber qué campos opcionales están presentes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top