Привет, ребята. У меня есть текстовый файл ниже, мне нужно сохранить данные второго столбца, но это дает мне ошибку, поскольку в некоторых строках есть 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();
}
Вам не нужно снова разбивать линию. Когда вы разбиваете строку в первый раз, проверьте, равна ли длина результирующего массива 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
.
@rishavprasher - Требование: I need to store the second column data...
но после разделения длина может быть больше 2. например. если это даже 3, мы должны сохранить число во 2-м столбце, верно?
@rishavprasher - Вы правы. Обновил ответ.
@ArvindKumarAvinash Я опубликовал новый код о том, как работает мой код, когда попробовал ваше предложение. Ты их видишь?
@SabuhaRajanKaya - я добавил обновление по вашему запросу. Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.
@ArvindKumarAvinash Большое спасибо, это очень помогло. Хорошего дня:)
Если вы хотите прочитать и сохранить только второй столбец, вы получите данные во втором столбце, используя индекс 1. (После цикла while.)
String secondCol = sCurrentLine.split(" ")[1];
Если у вас нет значения в столбце 2, оно выдаст исключение, которое вы должны обработать с помощью простой попытки поймать. Наконец, преобразуйте его в int и сохраните в своем списке. со след.
listOfInteger.add(Integer.parseInt(secoundCol));
Надеюсь, это сработает.
Разве не должно быть, если (arr.length >= 2)