将整数从文件读入arraylist

时间:2014-03-06 02:52:01

标签: java arraylist io

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

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

这是我到目前为止所做的,但是当我编译并运行时,无论出于什么原因打印永远不会结束[]。

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

3 个答案:

答案 0 :(得分:3)

  

当我编译并运行时,它打印永不结束

这个循环是罪魁祸首:

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

答案 1 :(得分:0)

试试这个:

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()函数将确定是否有任何新内容。

答案 2 :(得分:0)

问题在于此块

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

希望这有帮助。