【问题标题】:Reading integers from file into an arraylist将文件中的整数读入数组列表
【发布时间】:2014-04-08 11:09:39
【问题描述】:
import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;

public class Test
{
public static void main (String args[]) throws java.io.IOException
    {
    Scanner s = new Scanner(new File("filepath"));
    ArrayList<Integer> list = new ArrayList<Integer>();
    while (s.hasNext()){
        if(s.hasNextInt()){
            list.add(s.nextInt());
        }
    }
    s.close();
    System.out.println(list);
    }
}

我正在尝试从每行具有以下格式的文本文件中仅读取整数:文本整数文本。

这是我目前所拥有的,但是当我编译并运行它时,无论出于何种原因,它都会打印出永无止境的 []。

请注意,我更改文件路径只是为了将其上传到此处,这不是问题。

【问题讨论】:

    标签: java arraylist io


    【解决方案1】:

    当我编译并运行它时,它会打印永无止境

    这个循环是罪魁祸首:

    while (s.hasNext()){
        if(s.hasNextInt()){
            list.add(s.nextInt());
        }
    }
    

    考虑扫描器hasNext 时会发生什么,但无论下一个令牌是什么,它都不是int。在这种情况下,您的循环将变为无限,因为循环的主体不会消耗任何东西,从而使扫描仪处于与循环开始时完全相同的状态。

    要解决此问题,请将else 添加到您的if,读取s.next(),然后忽略结果:

    while (s.hasNext()){
        if(s.hasNextInt()){
            list.add(s.nextInt());
        } else {
            s.next();
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个:

      import java.util.Scanner;
      import java.io.*;
      import java.util.ArrayList;
      
      public class Test
      {
          public static void main (String args[]) throws java.io.IOException
          {
              Scanner s = new Scanner(new File("filepath"));
              ArrayList<Integer> list = new ArrayList<Integer>();
              while (s.hasNext()){
                  list.add(s.nextInt());
                  s.nextLine(); // Eat the next line
                  // Remove the conditional if statement to eat the new line
              }
              System.out.println(list);
              s.close();
          }
      }
      

      你必须引导读者的头移过该行,然后 hasNext() 函数将确定是否有任何新内容。

      【讨论】:

        【解决方案3】:

        这个块有问题

        while (s.hasNext()){
            if(s.hasNextInt()){
                list.add(s.nextInt());
            }
        }
        

        为了阅读指定的格式,你应该做的是:

        while (s.hasNext()){
            String line = s.nextLine();
            String[] content = line.split(" ");
            list.add(Integer.parseInt(content[1]));
        }
        

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2018-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-20
          • 2018-05-07
          • 2015-11-23
          • 1970-01-01
          相关资源
          最近更新 更多