В 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);
Учебник: Пробная версия: Коллекции