Прочитайте файл и сохраните его в 2D-списке Java - PullRequest
0 голосов
/ 06 мая 2018

Вот мой текстовый файл:

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" в java.lang.NumberFormatException.forInputString (неизвестный источник)
at java.lang.Integer.parseInt (Неизвестный источник)
at java.lang.Integer.parseInt (Неизвестный источник) at Findcycle.main (Findcycle.java:18)

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

В вашем файле есть запятая , и новая строка \n разделители.

Вы должны настроить свой сканер, чтобы использовать оба разделителя.

Заменить

        scanner.useDelimiter(DELIMITER);

с

        scanner.useDelimiter(",|\\n");
0 голосов
/ 06 мая 2018

Ваша Строка не так хорошо сформирована, как говорилось ранее. Я думал, что пробел - это новая строка в вашем коде.

Поэтому я изменил ваш сканер на BufferedReader и с этого момента работал с потоками:

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: я добавил ответ раньше, поэтому, если ваш пробел является пробелом, он все равно будет правильно компилировать числа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...