tokens - split java espacio en blanco
¿Cómo dividir las cadenas en un archivo y leerlas? (3)
Tengo un archivo con información en él. Parece que:
Michael 19 180 Miami
George 25 176 Washington
William 43 188 Seattle
Quiero dividir las líneas y cadenas y leerlas. Quiero que se vea así:
Michael
19
180
Miami
George
...
utilicé un código como este:
BufferedReader in = null;
String read;
int linenum;
try{
in = new BufferedReader(new FileReader("fileeditor.txt"));
}
catch (FileNotFoundException e) {System.out.println("There was a problem: " + e);}
try{
for (linenum = 0; linenum<100; linenum++){
read = in.readLine();
if(read == null){}
else{
String[] splited = read.split("//s+");
System.out.println(splited[linenum]);
}
}
}
catch (IOException e) {System.out.println("There was a problem: " + e);}
}
Lo que esto me dio fue
Michael
25
188
Creo que probablemente sea un problema con my for loop, pero no estoy muy avanzado en programación y agradeceré su ayuda. Gracias.
Puede usar un StreamTokenizer
. Se dividirá una secuencia en tokens según su configuración. De su pregunta, creo que desea tratar los finales de línea como separadores simbólicos. El código se vería así:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.StreamTokenizer;
public class ReaderSample {
public static void main(String[] args) {
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader("fileeditor.txt"));
StreamTokenizer st = new StreamTokenizer(in);
st.eolIsSignificant(false);
// remove comment handling
st.slashSlashComments(false);
st.slashStarComments(false);
while(st.nextToken() != StreamTokenizer.TT_EOF) {
if (st.ttype == StreamTokenizer.TT_NUMBER) {
// the default is to treat numbers differently than words
// also the numbers are doubles
System.out.println((int)st.nval);
}
else {
System.out.println(st.sval);
}
}
}
catch(IOException ex) {
System.err.println(ex.getMessage());
}
finally {
if (in != null) {
try {
in.close();
}
catch (IOException ex) {
}
}
}
}
}
Dependiendo de lo que necesite hacer con la información que necesita para establecer diferentes opciones, la documentación lo ayudará aquí.
String[] splited = read.split("//s+");
for (int i= 0; i<splited.length; i++){
System.out.println(splited[i]);
}
Debería repetir el resultado después de dividir la cadena.
Estás en medio camino, que es genial.
Al leer un archivo, el Reader
devolverá null
cuando llegue al final de la transmisión, lo que significa que no hay nada más disponible para leer. Su enfoque actual significa que quiere leer al menos 100 líneas, pero no más ... esto se volverá problemático en el futuro si aumenta el tamaño del archivo ... también es algo derrochador
En cambio, debemos usar el hecho de que un valor null
indica el final del archivo.
Cuando divide una línea, contendrá una cantidad de elementos. Está utilizando la variable linenum
para imprimir estos. El problema es que ya has leído y dividido la línea, el linenum
no es relevante para esta tarea, ya que representa la cantidad de líneas que ya has leído, no la parte de la cadena que acabas de dividir.
En su lugar, debe usar un bucle interno para mostrar los elementos divididos individuales para cada línea ...
Por ejemplo...
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader("fileeditor.txt"));
String read = null;
while ((read = in.readLine()) != null) {
String[] splited = read.split("//s+");
for (String part : splited) {
System.out.println(part);
}
}
} catch (IOException e) {
System.out.println("There was a problem: " + e);
e.printStackTrace();
} finally {
try {
in.close();
} catch (Exception e) {
}
}
Además, no lo olvides, si lo abres, debes cerrarlo;
Es posible que desee tomar un poco más de tiempo pasando también por E / S básica ;)