В соответствии с Java API Scanner использует разделители для разбивки всего ввода на токены. Я пытаюсь понять токены и разделители. Я делал эту программу и ударил путаницуРазделитель в сканере Java confusion
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner s = null;
try {
s = new Scanner(System.in);
s.useDelimiter("A");
System.out.println("1 " + s.next().length());
System.out.println("2 " + s.next().length());
System.out.println("3 " + s.next().length());
System.out.println("4 " + s.next().length());
} finally {
if (s != null) {
s.close();
}
}
}
}
Когда я использую вход AAAAAasdf
я получаю следующий результат.
1 0
2 0
3 0
4 0
Я могу понять этот вывод, как длина маркеров равна нулю между ограничителями, следовательно, все равны нулю, но, когда я использую стандартные разделители и дать входные данные как
_____aaa\n
-> Заменить подчеркивание пробелом и \n
Я нахожу вход в консоли затмения.
Для этого я получаю выход в
1 3
, которые я не могу понять. Я дал 5 пробелов, поэтому между ними должно быть 4 жетона длиной 0. Почему нет? Что мне здесь не хватает?
я предполагаю сканер пропускает пространства – njzk2
@ njzk2 Он работает в соответствии с регулярными выражениями шаблонов. См. Наиболее употребимый ответ и ссылку на API в комментарии. –