使用逗号扫描字符串

时间:2011-06-05 22:11:46

标签: java string

我使用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 个答案:

答案 0 :(得分:3)

scan.nextLine();将返回整行,逗号与否。

如果这不是正在发生的事情,那么问题必须在其他地方,你应该提供更多的代码。

Re:完整代码:这仍然有效。你得到/有害行为的错误是什么?

我认为发生的事情是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 :(得分:1)

一种可能的解决方案:在你正在做的时候获取下一行,然后在其上使用String#split来分割逗号(或者使用另一个或者使用第二个将该String作为输入的Scanner对象)。如果只有一个逗号,则拆分“,”将为您提供一个包含两个字符串的数组。你需要修剪第二个字符串以除去空格,或者拆分更精美的正则表达式。

答案 2 :(得分:0)

您可以使用上面提到的拆分,也可以在下一行创建另一个扫描程序,如果您有多个以“,”分隔的字段,这将特别有用。

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
}

但我仍然建议,如果你只是看一下像“城市,州”这样简单的事情,那就去分裂吧。