Заполнение массива с использованием разделителя в java

86
5

У меня есть текстовый документ, разделенный вкладками. Каждая строка повторяет тот же тип информации. Когда я использую hasNextLine() и счетчик для подсчета строк, он учитывает только часть строк. Я все еще могу создать Массивы размера счетчика, который я получаю. Когда я использую цикл for для заполнения массивов, результаты являются неожиданными.

Вот краткое изложение того, что я сделал.

    import java.util.*;
import java.io.*;
public class Test {
public static void main(String[] args) {
try {
Scanner input = new Scanner(new File("input.txt"));
int lines = 0;
input.nextLine(); //for the header of the table
while(input.hasNextLine()) {
lines++;
input.nextLine();
}
System.out.println(lines);//here I don't get the total amount
String[] colors = new String[lines];
int[] number = new int[lines];
fillArray(colors, number);
System.out.println(colors[i] + i);
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void fillArray(String[] color, int[] numbers) {
try {
Scanner input = new Scanner(new File("input.txt"));
input.nextLine(); //for table header
input.useDelimiter("\\t");
for(int i = 0; i < color.length; i++) {
color[i] = input.next();
input.next(); //info i'm not using
numbers[i] = input.nextInt();
input.nextLine(); //consumes '\n'
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

он компилируется, но мои результаты выглядят так:

null\n желтый0\n null1\n null2\n null3\n и т.п.

он также показывает правильный цвет и число; но только для одной линии.

Любая помощь будет оценена по достоинству. Я не использовал useDelimiter много, но из того, что, как я понимаю, будет делать '\ t' отдельные токены вместо белого пробела и '\n'

спросил(а) 2021-01-19T16:30:24+03:00 2 месяца, 4 недели назад
1
Решение
62

Не волнуйтесь, используйте это:

final List<String> lines = Files.readAllLines(Paths.get("input.txt"),
StandardCharsets.UTF_8);

Количество строк, прочитанных, так же просто, как lines.size(), и вам просто нужно пройти список, чтобы обрабатывать ваши строки.

ответил(а) 2021-01-19T16:30:24+03:00 2 месяца, 4 недели назад
44

Вы можете использовать OpenCSV http://opencsv.sourceforge.net/#custom-sepators. Это очень просто реализовать программу чтения CSV, используя ее.

ответил(а) 2021-01-19T16:30:24+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема