[英]Java scanner object skipping lines?
自从我写了任何基于Java的控制台以来,已经有一段时间了,
我在下面有这种方法,应该问我每一行,对吧? 相反,我得到一个提示,然后是三个提示。
try {
System.out.println("Please enter the product's LONG details: ");
product.setLongDetails(sc.next()); //set products long details
System.out.println("Please enter the product's SHORT details: ");
product.setShortDetails(sc.next()); //set short details
System.out.println("Please enter the product's UPC data: ");
product.setUpc(sc.next()); //set upc
System.out.println("Please enter the product's stock: ");
product.setStock(sc.nextInt());
System.out.println("Please enter the products price. ");
System.out.println("This MUST be entered with no dollar sign.");
product.setPrice(sc.nextBigDecimal());
InventoryManager.addProduct(product); //add product to database
}
我的控制台输出如下:
Please enter the product's LONG details:
Fireplace Cleaning Package
Please enter the product's SHORT details:
Please enter the product's UPC data:
Please enter the product's stock:
BUILD STOPPED (total time: 3 minutes 5 seconds)
扫描程序仅在类声明中初始化为:
public static Scanner sc = new Scanner(System.in); //class level scanner object for reuse.
如果我在每个对象设置方法之间调用sc.nextLine(),则它会正确提示,但会得到错误的信息:
Please enter the product's SHORT details:
Fire Poker
将对象显示为:请输入选择: Fire
该文档指出:
扫描程序使用定界符模式将其输入分为令牌,默认情况下,该模式与空格匹配。
这意味着,当您输入带有空格的文本时(例如您的示例中的“壁炉清洁包”),它将分成3个不同的输入,每个输入由一个sc.next()
调用返回。
解决方案是将您的分界线样式调整为换行符:
sc.useDelimeter("\\r?\\n");
Scanner.next()获取下一个完整令牌,后跟定界符,如doumentation中所述。 由于您输入了三个单词(此处的分隔符为空格),因此前三个
sc.next()
将会阅读每个单词。 我想你要找的是
sc.nextLine()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.