如何从给定输入中标记一组行?

时间:2013-04-21 00:42:56

标签: java loops input

我正在尝试一些非常简单的事情。

我必须逐行阅读以下输入,并为每一行创建一个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,而不是转到下一个令牌。关于如何实现我想要的目标的任何想法?

3 个答案:

答案 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]