我一直在努力学习一整天的课程。我正在尝试读取文本文件并一次读取每一行。拿出那条线,然后用线条的字词组成一个arraylist。然后使用arraylist的索引定义术语。
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;
}
}
我得到的错误是它只读取第一行。我究竟做错了什么? 非常感谢你提前
答案 0 :(得分:2)
你有“回归令牌”;在你的while循环中。似乎早期的回归会有效地切断第一行的处理。
答案 1 :(得分:0)
尝试将循环更改为以下内容。请注意我如何移动return语句。
while ((l = inputStream.readLine()) != null) {
Scanner tokenize = new Scanner(l);
while (tokenize.hasNext()) {
tokens.add(tokenize.next());
}
}
return tokens; // <-- outside the loop
编辑:如果您想要读取整个文件并将每行的标记存储在一个单独的数组中,那么您可以创建一个ArrayList
ArrayList
。< / p>
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;
}
注意:我的Java生锈了。
答案 2 :(得分:0)
简化为此......
String l;
while ((l = inputStream.readLine()) != null) {
tokens.addAll(Arrays.asList(l.split(" ")));
}
...在文件的所有行上创建所有标记的列表(如果这是您想要的)。