Сканирование строки с запятой - PullRequest
1 голос
/ 06 июня 2011

Я создал Scanner с system.in.

Как разрешить входу иметь возможность иметь запятые в нем, не переходя к следующему входу?

Например:

System.out.print("Enter City, State.");
String location = scan.nextLine();

Я не могу ввести city,state, потому что язык думает, что я хочу перейти к следующему вопросу ввода при сканировании.Как разрешить запятые в строке сканирования?

* Весь код

Scanner scan1 = new Scanner (System.in);

System.out.print ("City, State: ");
String location1 = scan.nextLine();

System.out.print ("Enter number: ");
number1 = scan.nextDouble();

System.out.print ("Enter number: ");
number2 = scan.nextDouble();

System.out.print ("City, State: ");
String name2 = scan1.nextLine();

System.out.print ("Enter #: ");
number3 = scan.nextDouble();

System.out.print ("Enter #: ");
number4 = scan.nextDouble();

Ответы [ 3 ]

3 голосов
/ 06 июня 2011

scan.nextLine(); вернет всю строку, запятые или нет.

Если это не то, что происходит, тогда проблема должна быть в другом месте, и вы должны предоставить больше кода.

Re: full code: Это все еще работает.В чем заключается ошибка, которую вы получаете / нежелательное поведение?

Мне кажется, что nextLine() перехватывает символ конца строки из вашего предыдущего ввода.

Чтопроисходит:

  • Предположим, вы вводите число, подобное 12.5, и нажимаете enter.
  • Буфер, из которого Scanner считывает данные, содержит 12.5\n, где \nсимвол новой строки.
  • Scanner.nextDouble читает только в 12.5, а \n остается в буфере.
  • Scanner.nextLine читает остальную часть строки, которая составляет всего \n и возвращает пустую строку.Вот почему он пропускает к следующему входу: он уже читает «строку».

Что бы я сделал, чтобы исправить это:

System.out.print ("City, State: ");
String name2;
do{
    name2 = scan1.nextLine();
}while( name2.trim().isEmpty() );

Что делает этот цикл, так этопродолжает читать следующую строку до тех пор, пока в ней не будет строки, отличной от пробела.

1 голос
/ 06 июня 2011

Одно из возможных решений: получить следующую строку, как вы делаете, и затем использовать String # split для разделения на запятую (либо это, либо использовать второй объект Scanner, который принимает эту строку в качестве ввода). Если есть только одна запятая, то разделение на «,» даст вам массив, содержащий две строки. Вам нужно будет обрезать вторую строку, чтобы избавиться от пробелов, либо разделить ее на более причудливое регулярное выражение.

0 голосов
/ 06 июня 2011

Вы можете использовать расщепление, как упомянуто выше, или вы можете создать другой сканер на следующей строке, это будет особенно полезно, если у вас есть несколько полей, разделенных ",".

System.out.print ("City, State: ");
Scanner temp = new Scanner(scan.nextLine());
temp.useDelimiter(",");
while(temp.hasNext()){
      //use temp.next();
      //Do whatever you want with the comma separated values here
}

Но я все же предлагаю, чтобы, если вы просто смотрели на что-то столь же простое, как «Город, штат», пошли на раскол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...