Как я могу читать только строки или целые числа, когда я читаю.txt файл с классом сканера в Java
Эй, ребята, это мой первый вопрос, так что если у меня есть какие-то ошибки или недостатки , я сожалею об этом.
Итак, я работаю над одной вещью ,которая в настоящее время мне не удается, и это, как говорится в названии, чтение только строк и целых чисел .txt-файл. Вот мой код:
File file = new File("C:\Users\Enes\Desktop\test.txt");
Scanner scn = new Scanner(file);
String[] s = new String[10];
int i = 0;
int[] fruits = new int[10];
while (scn.hasNextInt()) {
fruits[i++] = scn.nextInt();
}while (scn.hasNext()) {
s[i++] = scn.next();
}
for (int elm : fruits) {
System.out.print(elm + "t");
System.out.println("n");
}
for (String ele : s) {
System.out.print(ele + "t");
}
А вот что пишет дальше .txt-файл
Apple 5
Pear 3
Вывод такой:
0 0 0 0 0 0 0 0 0 0
Apple 5 Pear 3 null null null null null null
Итак, я хочу получить яблоко и грушу, строки в разных массивах и 5 и 3, которые являются целыми числами в другой массив. Как я могу это сделать? Любая помощь была бы очень признательна. Спасибо всем!
2 ответа:
Во-первых, я бы переименовал ваши переменные в нечто полезное:
Прямо сейчас вы пытаетесь схватить все 10 чисел, а затем все 10 имен. Но это не то, как выкладываются ваши данные.String[] names = new String[10]; int[] counts = new int[10];
Я бы использовал сканер, чтобы захватить линию и разделить ее оттуда:
Scanner sc = new Scanner(new File(file)); int index = 0; while(sc.hasNextLine()) { String line = sc.nextLine(); String[] tokens = line.split(" "); names[index] = tokens[0]; counts[index] = Integer.parseInt(tokens[1]); index++; }
Для вывода мы повторяем оба цикла одновременно:
for(int i = 0; i < 10; i++) { System.out.println(names[i] + "\t" + counts[i]); }
Это адаптация ответа Корсики (который-сам по себе, правильный +1), но который демонстрирует использование второго
Scanner
для разбораline
...int index = 0; while (sc.hasNextLine()) { String line = sc.nextLine(); Scanner lineScanner = new Scanner(line); names[index] = lineScanner.next(); counts[index] = lineScanner.nextInt(); index++; }
Потому что люди, кажется, забывают, что
Scanner
может анализироватьString
значения