2010-08-16 4 views
2

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

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

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

А-В-С

выход будет

A B

и ждать, пока Я печатаю последний символ «-», чтобы распечатать последний символ.

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

ответ

5

Если 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, которые содержат данные между всеми - с.

Here is a link to the String.split() documentation for your reading pleasure.

+0

, поэтому нет никакого способа обойти это, но использовать один сканер, который принимает полный вход, и другой сканер, который анализирует вход? – starcorn

+0

@klw, я покажу вам, как я это сделаю в редактировании. – jjnguy

+0

@klw, вам нужно всего 1 «Сканер». – jjnguy

3

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

0

Как я хотел бы сделать это следующим образом:

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

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

Смежные вопросы