текстовый файл с целыми числами, строками и маркированным списком (1.)

#java #file #io #txt

Вопрос:

У меня есть txt-файл, в котором есть несколько строк, подобных этой

 7. SSWAB        38    15   -  57    
 

но мне не нужны все значения, только строка и целые числа.
Я бы использовал nextInt для целых чисел, но как я могу справиться с 1. и -?

Также есть строка, что полезного nextString ? Этого next достаточно?

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

 scanner.next(); //7.
String  s = (scanner.next()); //SAVES sswab
Integer n1 = scanner.nextInt(); //38
Integer n2 = scanner.nextInt(); //15
Integer n3 = scanner.nextInt(); //- is skipped, as next int is 57
 

Ответ №1:

Вы можете использовать scanner.next(Pattern pattern) для сопоставления этих групп.

Попробуйте это регулярное выражение

 -?d .?(d )?|w 
 

ДЕМОНСТРАЦИЯ
Он поймает все группы, которые вы упомянули, плюс дробные числа и отрицательные числа.

Затем вы можете использовать это регулярное выражение в сканере

 String text = "7. SSWAB        38    15   -  57    ";
Scanner scanner = new Scanner(text);
while(scanner.hasNext()) {
    if(scanner.hasNext("-?\d \.?(\d )?|\w ")) {
        System.out.println(scanner.next("-?\d \.?(\d )?|\w "));
    } else {
        scanner.next();
    }
}
 

Этот код улавливает все совпадающие группы и пропускает другие.

Выход

 7.
SSWAB
38
15
57