JAVA读取数字数据并存储到arraylist

时间:2015-09-19 00:00:35

标签: java arraylist text-files

我有一个包含以下内容的文本文件,我试图读入ArrayList:

% There are 600 students. Each row is the set of desired courses (numbered from 1 to 18) for that student. 

9.     13.    3.     7.     5.     8.     6.     12.    14.    11.    18.    15.  
12.    1.     4.     16.    8.     5.     14.    3.     2.     6.     18.    9.   
4.     16.    9.     13.    17.    6.     8.     14.    3.     11.    15.    10.  
4.     16.    9.     13.    14.    11.    2.     15.    5.     10.    17.    8.   
4.     16.    12.    1.     18.    14.    9.     17.    8.     5.     6.     11.  
4.     16.    12.    1.     8.     5.     14.    11.    18.    10.    15.    2.   
9.     13.    12.    1.     11.    10.    18.    8.     4.     2.     5.     15.  
9.     13.    3.     7.     14.    11.    10.    4.     15.    18.    12.    17.  
12.    1.     3.     7.     5.     10.    11.    6.     18.    14.    8.     9.   
9.     13.    12.    1.     18.    10.    17.    3.     6.     14.    8.     15.

以下是我的代码,但它没有阅读任何内容:

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class SchedReader {

    public static void main(String[] args){

        //reading   
        try{

            File homedir = new File(System.getProperty("user.home"));
            File fileToRead = new File(homedir, "workspace/Project1/sched.txt");

            List<Integer> integers = new ArrayList<Integer>();

            Scanner fileScanner = new Scanner(fileToRead);

            fileScanner.nextLine();

            fileScanner.useDelimiter(". ");

            while (fileScanner.hasNextInt())
            {
               integers.add(fileScanner.nextInt());
            }

            System.out.println("Arraylist contains: " + integers.toString());
        }       
        catch (Exception e){
            System.out.println(e.toString());
        }


    }
}

这是我的输出:

Arraylist contains: []

有人可以建议我如何更改我的代码以便能够将所有数据加载到ArrayList中吗?

修改

所以这就是我改变代码以推进每一行的方式:

    fileScanner.useDelimiter("[\\. \\n]+");

    while (fileScanner.hasNextInt())
    {
       integers.add(fileScanner.nextInt());
       fileScanner.hasNextLine();
       fileScanner.nextLine();

    }

但是,它仍然只输出一行。

3 个答案:

答案 0 :(得分:2)

您希望阅读的内容前面有两行。跳过2行。

fileScanner.nextLine();
fileScanner.nextLine();

您尝试使用空格' '和点'.'字符作为分隔符,但它被解释为正则表达式,这意味着分隔符必须是任何字符后跟恰好是一个空间。由于数字之间有多个空格,因此没有下一个int令牌。

为分隔符使用正确的正则表达式有助于:

fileScanner.useDelimiter("[\\. ]+");  // One or more of . and space

答案 1 :(得分:0)

您使用当前代码获得一行,因为它没有前进到后续行。使用fileScanner.nextLine()添加fileScanner.hasNextLine()以前进到下一行,您可以使用更正的分隔符来读取整数。

答案 2 :(得分:0)

我不熟悉Scanner API,但您可以通过以下方式获得结果:

// reading
    try {
        File fileToRead = new File(SchedReader.class.getResource("afile").getPath());

        List<Integer> integers = new ArrayList<Integer>();

        BufferedReader br = new BufferedReader(new FileReader(fileToRead));
        br.readLine();
        br.readLine();
        String line = null;
        while((line = br.readLine())!= null){
            String[] values = line.split("\\.");
            for(String value: values){
                if(value.trim().length() > 0){
                    integers.add(Integer.parseInt(value.trim()));
                }
            }
        }

        br.close();

        System.out.println("Arraylist contains: " + integers.toString());
    } catch (Exception e) {
        System.out.println(e.toString());
    }