Problemas con mi programa que involucra ArrayLists, BufferedReader, métodos y forgetfullness general de cómo funciona java
-
04-10-2019 - |
Pregunta
Estoy teniendo dificultades con un programa que he estado trabajando durante todo el día. Estoy tratando de leer un archivo de texto y leer cada una línea a la vez. Tome esa línea y crea un ArrayList de las palabras de la línea. a continuación, utilizando el índice de la arraylist definir un acuerdo con él.
public class PCB {
public static void main(String arg[]) {
read();
}
public static ArrayList read() {
BufferedReader inputStream = null;
ArrayList<String> tokens = new ArrayList<String>();
try {
inputStream = new BufferedReader(new FileReader("processes1.txt"));
String l;
while ((l = inputStream.readLine()) != null) {
Scanner tokenize = new Scanner(l);
while (tokenize.hasNext()) {
tokens.add(tokenize.next());
}
return tokens;
}
} catch (IOException ioe) {
ArrayList<String> nothing = new ArrayList<String>();
nothing.add("error1");
System.out.println("error");
//return nothing;
}
return tokens;
}
}
El error que estoy recibiendo es sólo lee la primera línea. ¿Qué estoy haciendo mal? Muchas gracias de antemano
Solución
Usted tiene "fichas de retorno;" en su bucle while. Parece como que pronto retorno sería efectivamente cortar el procesamiento en la primera línea.
Otros consejos
Trate de cambiar su bucle a lo siguiente. Nota cómo moví la instrucción de retorno.
while ((l = inputStream.readLine()) != null) {
Scanner tokenize = new Scanner(l);
while (tokenize.hasNext()) {
tokens.add(tokenize.next());
}
}
return tokens; // <-- outside the loop
Editar:. Si desea leer todo el archivo y almacenar las muestras de cada línea en una matriz independiente, entonces se podría crear un ArrayList
de ArrayList
public static ArrayList<ArrayList<String>> tokenizeFile(string filename) {
BufferedReader inputStream = new BufferedReader(new FileReader(filename));
ArrayList<ArrayList<String>> lines = new ArrayList<ArrayList<String>>();
while (true) {
String line = inputStream.readLine();
if (line == null) break;
ArrayList<String> tokens = new ArrayList<String>();
Scanner tokenizer = new Scanner(line);
while (tokenizer.hasNext()) {
tokens.add(tokenizer.next());
}
lines.Add(tokens);
}
return lines;
}
Nota:. Mi Java es oxidado
Simplificar a este ...
String l;
while ((l = inputStream.readLine()) != null) {
tokens.addAll(Arrays.asList(l.split(" ")));
}
... crea una lista de todas las fichas de todas las líneas en el archivo (si eso es lo que quiere).