读取文件并将其保存到2d列表中

时间:2018-05-06 10:20:40

标签: java exception text-files numberformatexception

这是我的文本文件:

1,2,3
4,5,6,7

这是我的代码段:

import java.io.*;
import java.util.*;

public class Findcycle {
    private final static String DELIMITER = ",";
    private final static String filePath = "D:\\1.txt";
    public static void main(String[] args) {
        File inputFile = new File(filePath);
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        try 
        {
            Scanner scanner = new Scanner(inputFile);
            scanner.useDelimiter(DELIMITER);
            while(scanner.hasNext())
            {
                String value = scanner.next();
                Integer num = Integer.parseInt(value);
                numbers.add(num);
            }
            System.out.println(numbers);
            scanner.close();
        } 
        catch (FileNotFoundException e) 
        {
            e.printStackTrace();
        }
    }
}

我收到以下异常:

  

线程“main”中的异常java.lang.NumberFormatException:用于输入   字符串:“3 4”at   java.lang.NumberFormatException.forInputString(Unknown Source)
  在java.lang.Integer.parseInt(未知来源)
  在java.lang.Integer.parseInt(未知来源)   在Findcycle.main(Findcycle.java:18)

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您的文件混合了逗号cout和新行,分隔符。

您应该将扫描仪配置为使用两个分隔符。

替换此

\n

        scanner.useDelimiter(DELIMITER);

答案 1 :(得分:0)

你的字符串格式不如前所述。 我认为空格实际上是代码中的新行。

因此,我将您的扫描仪更改为BufferedReader并从那里使用Streams:

private final static String filePath = "D:\\1.txt";
public static void main(String[] args) {
    File inputFile = new File(filePath);
    ArrayList<Integer> numbers = new ArrayList<>();
    try
    {
        BufferedReader rd = new BufferedReader(new FileReader(inputFile));
        Pattern pattern = Pattern.compile("[,\\s]+");
        rd.lines().forEach(x-> Arrays.asList(pattern.split(x)).forEach(y->numbers.add(Integer.parseInt(y))));
        rd.close();
        System.out.println(numbers);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这条线非常整齐,不是吗?

PS:我之前添加了答案,所以如果你的空格是一个空格,它仍然会正确编译数字