Чтение из текстового файла с пробелами и последующее размещение в arrayList

Я провел последнюю неделю, пытаясь понять, как заставить этот глупый код работать. Мне удалось заставить все работать, кроме чтения из моего текстового файла. Он может прочитать отдельное целое число в строке, но когда ему дается строка с несколькими целыми числами, разделенными пробелами, он выходит из строя. Теперь я пошел и попытался это исправить, и код даже не будет компилироваться. Только одна строка вызывает проблемы. Я не очень хорош в кодировании, поэтому я не знаю, с чего начать. Да, я посмотрел это онлайн. Да, я проверил форумы. Да, я пробовал несколько разных способов, чтобы заставить это работать.... Как я могу это исправить??:(

ArrayList<Integer> list = new ArrayList<Integer>();
// the above line is in a different method in the same class, but it's relevant here


File file = new File("C:\\Users\\Jocelynn\\Desktop\\input.txt");
    BufferedReader reader = null;

    try
    {
        reader = new BufferedReader(new FileReader(file));
        String text = null;


        while ((text = reader.readLine()) != null)
        {
            // I want the following line to read "218 150 500 330", and to store each individual integer into the list. I don't know why it won't work :(
            list.add(Integer.parseInt(src.next().trim()));
        }
    } 
    catch (FileNotFoundException e)
    {
    e.printStackTrace();
    } 
    catch (IOException e) 
    {
    e.printStackTrace();
    } 
    try
    {
   reader.close();
    }
    catch (IOException e) 
    {
    e.printStackTrace();
    }


//print out the list
System.out.println(list);

Спасибо вам за помощь! Я уверен, что мне просто не хватает чего-то действительно простого...

3 ответа

Вы можете использовать Scanner(String) лайк

while ((text = reader.readLine()) != null) {
    Scanner scanner = new Scanner(text);
    while (scanner.hasNextInt()) {
        list.add(scanner.nextInt());
    }
}

Конечно, весь ваш метод может быть упрощен с помощью try-with-resources Заявление и diamond operator и просто Scanner(File) лайк

public static void main(String[] args) {
    File file = new File("C:\\Users\\Jocelynn\\Desktop\\input.txt");

    List<Integer> list = new ArrayList<>();
    try (Scanner scanner = new Scanner(file);) {
        while (scanner.hasNextInt()) {
            list.add(scanner.nextInt());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    // print out the list
    System.out.println(list);
}

Сделайте это внутри цикла while

String[] individualArray = text.split(" ");//note space
for(String individual:individualArray){
    yourList.add(individual);//You need to parse it to integer here as you have already done
}

В приведенном выше коде IndividualArray будет содержать все отдельные целые числа, которые separated by space, А внутри цикла for каждая строка должна быть проанализирована до целого числа, а затем добавлена ​​в ваш список

Попробуй это:

public static void main(String[] args) {

        ArrayList<Integer> list = new ArrayList<Integer>();
        File file = new File("C:\\Users\\Jocelynn\\Desktop\\input.txt");
        BufferedReader reader = null;

        try
        {
            reader = new BufferedReader(new FileReader(file));
            String text = null;

            while ((text = reader.readLine()) != null)
            {
                // you need only this for loop in you code.
                for (String value : text.split(" ")) {  // get list of integer
                     if(!value.equals(""))             // ignore space                      
                     list.add(Integer.parseInt(value));  // add to list
                }

            }
        } catch (FileNotFoundException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
        try
        {
            reader.close();
        } catch (IOException e)
        {
            e.printStackTrace();
        }

        // print out the list
        System.out.println(list);

    }
Другие вопросы по тегам