Сканер, используйте Делимитер - PullRequest
2 голосов
/ 16 августа 2010

При использовании useDelimiter из класса Scanner возникает некоторая проблема.

Scanner sc = new Scanner(System.in).useDelimiter("-");
while(sc.hasNext())
{
    System.out.println(sc.next());
}

если у меня есть этот вход

А-В-С

вывод будет

A B

и подождите, пока я введу другой «-», чтобы он напечатал последний символ

Однако, если вместо ввода данных пользователем я вставлю строку в сканер, код будет работать. В чем причина, и как я могу это исправить? Я не хочу использовать StringTokenzier

Ответы [ 3 ]

5 голосов
/ 16 августа 2010

Если Scanner не ждал, пока вы введете другой -, то он ошибочно предположил бы, что вы закончили ввод ввода.

Я имею в виду, что Scanner должен ждать, пока вы введете -, потому что он не может узнать длину следующего ввода.

Итак, если пользовательхотел набрать A-B-CDE, и вы остановились, чтобы сделать глоток кофе на C, он не получил бы правильного ввода.(Вы ожидаете [ A, B, CDE ], но он получит [ A, B, C ])

Когда вы передаете его в полном String, Scanner знает, где находится конец ввода, и не нужно ждатьдля другого разделителя.

Как бы я это сделал:

Scanner stdin = new Scanner(System.in);
String input = stdin.nextLine();
String[] splitInput = input.split("-", -1);

Теперь у вас будет массив Strings, содержащий данные между всеми - с.

Вот ссылка на документацию String.split() для вашего удовольствия от чтения.

3 голосов
/ 16 августа 2010

Вы можете использовать альтернативную строку-разделитель useDelimiter( "-|\n" ); Он работает как с аргументом String, так и с чтения из System.in. В случае System.in для этого необходимо нажать Enter в конце строки.

0 голосов
/ 03 марта 2017

Как бы я это сделал:

Scanner stdin = new Scanner(System.in);
String s = stdin.nextLine();
String[] splitInput = s.split("-", -1);

Теперь у вас будет массив Strings, содержащий данные между всеми - s.

...