В Java, как я могу прочитать текстовый файл, состоящий из "слова<пробел>номер<пробел>номер"?

У меня есть текстовый файл с этими типами значений (пример):

5 Dog 23 45 Cat 97 23 Mouse 13 23 Bird 10 23 Dog 99 18

Первая цифра "5" - это общее количество объектов массива, которые мне нужно разбить на токены. Я хочу, чтобы, когда я токенизировал текстовый файл, он игнорировал "5", а затем читал их как:

Dog 23 45
Cat 97 23
Mouse 13 23
Bird 10 23
Dog 99 18

а затем положить все те же объекты вместе в массиве. Так, например, собачник будет иметь:

Dog 23 45
Dog 99 18

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

2 ответа

С рисунком:

@Test
public void testPattern() {
    String value = "5 Dog 23 45 Cat 97 23 Mouse 13 23 Bird 10 23 Dog 99 18";
    Matcher matcher = Pattern.compile("(\\D+)\\d+\\s++\\d+").matcher(value);
    while (matcher.find()) {
        System.out.println(matcher.group() + ": " + matcher.group(1));
    }

}

Выход:

 Dog 23 45:  Dog 
 Cat 97 23:  Cat 
 Mouse 13 23:  Mouse 
 Bird 10 23:  Bird 
 Dog 99 18:  Dog

Вы можете использовать java.io.BufferedReader для чтения файла построчно.

BufferedReader reader = new BufferedReader(new FileReader("/path/to/file.txt"));
String line = null;
while ((line = reader.readLine()) != null) {
// ...
}

Учебник. Основные операции ввода-вывода> Потоки ввода-вывода> Потоки символов

Вы можете использовать String#split() для разделения String на части.

String[] parts = line.split("\\s");

Учебник. Числа и строки> Строки> Управление символами в строке

Вы можете использовать расширенный цикл for для перебора частей String.

for (String part : parts) {
    // ...
}

Учебник: Основы языка> Операции управления потоком> Оператор for

Вы можете использовать Integer#valueOf() для преобразования строки в целое число.

Integer i = Integer.valueOf(part);

Учебник: Интерфейсы> Список интерфейсов

Вы можете использовать List#add(), чтобы добавить элемент в список.

list.add(i);

Учебник: Пробная версия: Коллекции

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