2

我正在尝试一些非常简单的东西。

我必须逐行阅读以下输入并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);
    }
}

如您所见,我每次都重新初始化,而不是移动到下一个令牌stnewLine关于如何实现我的目标的任何想法?

4

3 回答 3

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]
于 2013-04-21T00:58:07.027 回答
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);
   }
}
于 2013-04-21T00:55:40.383 回答
1

分词器语句必须直接在外循环中。

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);
     }
}
于 2013-04-21T00:56:17.227 回答