繁体   English   中英

Java扫描程序对象跳过行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM