我使用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();
答案 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
}
但我仍然建议,如果你只是看一下像“城市,州”这样简单的事情,那就去分裂吧。