2011-06-05 66 views
0

我创建了一个Scannersystem.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(); 
+0

什么编程语言? – Jonas 2011-06-05 22:12:26

+0

它是java。抱歉。 – Jimmy 2011-06-05 22:14:56

+0

用户主要通过标签浏览。请选择标签聪明,仔细吸引合适的人:) – BalusC 2011-06-05 22:16:37

回答

3

scan.nextLine();将返回整条生产线,逗号或不。

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

回复:完整代码:仍然有效。你遇到的错误/不需要的行为是什么?

我认为正在发生的是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()); 

什么这个循环所做的就是一直读取下一行,直到有比它的空白以外的东西线。

+0

*提供了整个代码 – Jimmy 2011-06-05 22:31:54

+0

我试过了,我真的不知道什么是不工作。 – trutheality 2011-06-05 22:50:45

+0

我现在看到我的问题。它处理nextLine,因为输出是输入城市,州://输入数字://输入数字://输入城市,州:输入数字://最后一行在请求输入时显示在一起 - – Jimmy 2011-06-05 22:54:19

1

一个可能的解决方案:获取下一行,然后使用String#split分割逗号(或者使用另一个将该String作为输入的Scanner对象)。如果只有一个逗号,那么分割“,”会给你一个包含两个字符串的数组。你需要修剪第二个字符串以摆脱空白,或者分裂一个更奇特的正则表达式。

0

您可以像上面提到的那样使用split,也可以在下一行创建另一个扫描器,如果您有多个由“,”分隔的字段,这尤其有用。

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 
} 

但我仍然建议,如果你只是在看一些像“城市,国家”这样简单的东西,去拆分。

+0

如果他想这样,他可以使用原始扫描仪的'.next()'。 – trutheality 2011-06-05 22:49:48

+0

我现在看到我的问题。它涉及nextLine由于输出 输入城市,州:// 输入数字:// 输入数字:// 输入城市,州:输入数字:// 其中最后一行显示为所以在一起询问输入 – Jimmy 2011-06-05 22:52:10

+0

@trutheality时,这是正确的,但正如我所说的,使用相同的扫描仪进行较大的测试用例可能不会很好。但正如你所提到的,在这种情况下,这是相当微不足道的。 – eerpini 2011-06-15 19:19:39