una tokens separar parte numeros extraer especiales espacio ejemplo caracteres cadenas cadena blanco java split filereader

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 ;)