扫描仪在空格后无法识别

40

我正在编写一个程序,要求用户输入完整姓名,然后将输入反转(例如John Doe - Doe, John)。我开始尝试只获取输入,但它只获取了名字的第一个单词。

这是我的代码:

public static void processName(Scanner scanner) {
    System.out.print("Please enter your full name: ");
    String name = scanner.next();
    System.out.print(name);
}
7个回答

64

String name = scanner.next(); 替换成 String name = scanner.nextLine();

请查阅相关文档 - next()nextLine()


非常感谢您的快速回复,真的帮了我很大的忙。 - igeer12
4
我遇到了同样的问题,但是使用nextLine()方法的字符串最终为空。这是我的代码:System.out.print("车牌号码:"); String license = sc.nextLine();。这篇答案发布后Scanner有修改过吗? - Alex Dueppen
嗨,Alex,请在这里找到我的答案,看看是否有帮助-https://dev59.com/fmcs5IYBdhLWcg3w3HkG#64991271 - Shubham Arya

16

尝试替换您的代码

String name = scanner.nextLine();

相反

String name = scanner.next();

next() 只能读取输入直到下一个 空格。它无法读取被 空格 分隔的两个单词。此外,next() 在读取输入后将光标放在同一行。

nextLine() 读取输入,包括单词之间的 空格(也就是说,它读取直到行尾的 \n)。一旦读取输入,nextLine() 将光标定位在下一行。


next() 只能读取输入直到空格。它无法读取由空格分隔的两个单词。空格包括空格、制表符和换行符。 - Fred Hu

4
来自Scanner文档的内容:

使用分隔符模式将输入拆分为标记, 默认情况下匹配空格。

而且

public String next()

查找并返回此扫描器中的下一个完整标记。完整令牌前面和后面的输入与分隔符模式匹配。

这意味着默认的分隔符模式为“空格”。 这将在空格处拆分您的文本。 使用nextLine()获取整行内容。

3
 public static void processName(Scanner scanner) {
        System.out.print("Please enter your full name: ");
        scanner.nextLine();
        String name = scanner.nextLine();
        System.out.print(name);
    }

试试上面的代码,Scanner 应该能够读取空格并移动到 String 的下一个引用处。


你能解释一下我的疑问吗?- https://dev59.com/fmcs5IYBdhLWcg3w3HkG#64991271 - Shubham Arya

2

scanner.next(); 只读取下一个单词。应该使用 scanner.nextLine();。希望这有所帮助。


2

如果您不想使用.nextLine(),您也可以通过.useDelimiter()方法将.next()配置为使用\n作为分隔符模式,如下所示:

public static void processName(Scanner scanner) {
    System.out.print("Please enter your full name: ");
    scanner.useDelimiter("\n");
    String name = scanner.next();
    System.out.print(name);
}

1
尝试使用这个。
String name = scanner.nextLine();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接