【问题标题】:How to tokenize a set of lines from a given input?如何标记来自给定输入的一组行?
【发布时间】:2013-04-14 03:45:54
【问题描述】:

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

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

【问题讨论】:

  • 你不能逐行做。 2 5 10 不是有效整数。
  • @Pescis 2 5 10 行代表三个有效整数 ;-)

标签: java loops input


【解决方案1】:

您在for 循环中多次将第一个令牌添加到ArrayList。只需遍历令牌:

while ((newLine=f.readLine()) != null){
   StringTokenizer st = new StringTokenizer(newLine);
   while (st.hasMoreTokens()) {
      int number = Integer.parseInt(st.nextToken()); 
      input.add(number);
   }
}

【讨论】:

    【解决方案2】:

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

    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);
         }
    }
    

    【讨论】:

      【解决方案3】:

      您不需要遍历行长。相反,您需要遍历标记器返回的所有标记并将它们放入一个列表中,在您完成一行后将该列表放入另一个列表中,因此您最终会得到一个列表列表

      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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-14
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        • 2019-02-19
        • 2015-08-10
        • 1970-01-01
        • 2023-02-23
        相关资源
        最近更新 更多