我正在尝试一些非常简单的事情。
我必须逐行阅读以下输入,并为每一行创建一个ArrayList
整数。
2 5 10
3 5 15
我正在尝试使用以下代码处理它
while((newLine=f.readLine()) != null){
for(int k=0; k<newLine.length(); k++){
StringTokenizer st = new StringTokenizer(newLine);
int i1 = Integer.parseInt(st.nextToken());
System.out.println("Adding to list"+i1);
input.add(i1);
}
}
正如您所看到的,我每次都将st
重新初始化为newLine
,而不是转到下一个令牌。关于如何实现我想要的目标的任何想法?
答案 0 :(得分:1)
您在ArrayList
循环中多次向for
添加第一个标记。只需迭代令牌:
while ((newLine=f.readLine()) != null){
StringTokenizer st = new StringTokenizer(newLine);
while (st.hasMoreTokens()) {
int number = Integer.parseInt(st.nextToken());
input.add(number);
}
}
答案 1 :(得分:1)
tokenizer语句必须直接在外部循环中。
while((newLine=f.readLine())!=null){
StringTokenizer st = new StringTokenizer(newLine); //this must be once for every line. not for every character in each line
while(st.hasNext()){
int i1 = Integer.parseInt(st.nextToken());
System.out.println("Adding to list"+i1);
input.add(i1);
}
}
答案 2 :(得分:1)
您不需要遍历行长度。您需要迭代标记生成器返回的所有标记并将它们放入列表中,在完成将该列表放入另一个列表中的一行后,最终得到列表列表
List<List<Integer>> linesOfIntegers = new ArrayList<>();
while((newLine = f.readLine()) != null) {
StringTokenizer st = new StringTokenizer(newLine);
List<Integer> lineOfIntegers = new ArrayList<>();
while(st.hasMoreTokens()) {
lineOfIntegers.add(Integer.parseInt(st.nextToken()));
}
linesOfIntegers.add(lineOfIntegers);
}
for(List<Integer> lineOfIntegers : linesOfIntegers) {
System.out.println(lineOfIntegers);
}
<强>输出强>
[2, 5, 10]
[2, 5, 15]