Java Чтение txt с разными номерами в файле столбца и сохранение данных в массиве

Привет, ребята. У меня есть текстовый файл ниже, мне нужно сохранить данные второго столбца, но это дает мне ошибку, поскольку в некоторых строках есть 1, в некоторых - 2, а в некоторых - 3 ввода в каждой строке. Как я могу решить эту проблему?


5
3 4
3 4
3 3
3 4
3 3
3 4
3 3
3 2
3 4
3 3
3 2
3 1
3 4
3 3
3 2
3 1
3 0
1
2
5 3 4
3 4
3 4
3 3
3 4
3 3
3 4
3 3
3 2
3 4
3 3
3 2
3 1
3 4
3 3
3 2
3 1
3 0
1
2
5 4 6
4 4
4 4
4 4
4 4
4 4
4 4
4 3
4 3
4 3
4 3
4 4
4 4
1
2
5 4 6
0

Вот что я сделал, я пытался различать как по размеру, так и по-другому, но все еще не могу получить ответ...

String line = "";

ArrayList<String> numbers= new ArrayList<String>();

try {

    String sCurrentLine;
    br = new BufferedReader(new FileReader("input1.txt"));
    int n = 0;

    while ((sCurrentLine = br.readLine()) != null) {
        String[] arr = sCurrentLine.split(" ");
        int size = arr.length;

        List<String> list = ConvertToList.convertArrayToList(arr);
        List<Integer> listOfInteger = convert.convertStringListToIntList(list, Integer::parseInt);
        if (list.size() == 2) {
            line.split("\\s+");
            numbers.add(line.split("\\s+")[0]);
            System.out.println(numbers);
        }
    }
} catch(Exception e) {
    e.printStackTrace();
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам не нужно снова разбивать линию. Когда вы разбиваете строку в первый раз, проверьте, равна ли длина результирующего массива 2. Если да, добавьте arr[1] к numbers.

while ((sCurrentLine = br.readLine()) != null) {
    String[] arr = sCurrentLine.split(" ");                
    if (arr.length >= 2) {
        numbers.add(arr[1]);
        System.out.println(numbers);
    }
}

Обновлять:

Основываясь на вашем комментарии, я предоставляю вам следующий код, который использует ваши списки:

while ((sCurrentLine = br.readLine()) != null) {
    String[] arr = sCurrentLine.split(" ");
    List<String> list = ConvertToList.convertArrayToList(arr);
    List<Integer> listOfInteger = convert.convertStringListToIntList(list, Integer::parseInt);
    if (listOfInteger.size() >= 2) {
        numbers.add(listOfInteger.get(1));
    }          
}
System.out.println(numbers);

Вы можете оставить System.out.println(numbers); внутри или снаружи цикла while в зависимости от того, как вы хотите напечатать numbers.

Разве не должно быть, если (arr.length >= 2)

rishav prasher 11.12.2020 17:29

@rishavprasher - Требование: I need to store the second column data...

Arvind Kumar Avinash 11.12.2020 17:30

но после разделения длина может быть больше 2. например. если это даже 3, мы должны сохранить число во 2-м столбце, верно?

rishav prasher 11.12.2020 17:32

@rishavprasher - Вы правы. Обновил ответ.

Arvind Kumar Avinash 11.12.2020 17:33

@ArvindKumarAvinash Я опубликовал новый код о том, как работает мой код, когда попробовал ваше предложение. Ты их видишь?

Sabuha Kaya 11.12.2020 18:09

@SabuhaRajanKaya - я добавил обновление по вашему запросу. Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.

Arvind Kumar Avinash 11.12.2020 18:17

@ArvindKumarAvinash Большое спасибо, это очень помогло. Хорошего дня:)

Sabuha Kaya 11.12.2020 18:28

Если вы хотите прочитать и сохранить только второй столбец, вы получите данные во втором столбце, используя индекс 1. (После цикла while.)

String secondCol = sCurrentLine.split(" ")[1];

Если у вас нет значения в столбце 2, оно выдаст исключение, которое вы должны обработать с помощью простой попытки поймать. Наконец, преобразуйте его в int и сохраните в своем списке. со след.

listOfInteger.add(Integer.parseInt(secoundCol));

Надеюсь, это сработает.

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