Как я могу читать только строки или целые числа, когда я читаю.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 2

2 ответа:

Во-первых, я бы переименовал ваши переменные в нечто полезное:

String[] names = new String[10];
int[] counts = new int[10];
Прямо сейчас вы пытаетесь схватить все 10 чисел, а затем все 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 значения