【问题标题】:Java Scanner that takes only letters and spaces, but not space-only strings [duplicate]Java Scanner 只接受字母和空格,但不接受仅限空格的字符串 [重复]
【发布时间】:2016-08-20 17:50:07
【问题描述】:

我做了一个简单的程序,允许用户输入一个名字,然后打招呼。

import java.util.Scanner;
public class nameinput {
    public static void main(String args[]){
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a name: (only letters, at least 2 characters long)");
        while (true) {
            String name= sc.next();
            if (name.length() < 2){
                System.out.println("This name is too short!");
                continue;
            }
            else if (!name.matches("[a-zA-Z]+")){
                System.out.println("Letters only!");
                continue;
            }
            else {
                System.out.println("Hello, " + name);
                break;
            }
        }
    }
}

但是我有两个问题我无法解决:

  1. 当用户输入包含空格的名称时,它只获取空格之前的内容。
  2. 当用户只传递一系列空格或不传递任何内容时,什么都不会发生,就像他没有输入任何内容一样。我希望用户收到一条正确的消息,通知他不允许使用仅限空格的字符串和空字符串。

希望我对问题的描述很清楚,在此先感谢您的帮助!

【问题讨论】:

  • Scanner 有分隔符吗?默认是什么?
  • 您需要使用 nextLine() 来获取包含空格(超过 1 个单词)的扫描仪输入 //String name= sc.nextLine();

标签: java string java.util.scanner


【解决方案1】:
import java.util.Scanner;
public class nameinput {
    public static void main(String args[]){
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a name: (only letters, at least 2 characters long)");
        while (true) {
            String name= sc.nextLine();
            if (name.length() < 2){
                System.out.println("This name is too short!");
                continue;
            }
            else if (!name.matches("[a-zA-Z]+")){
                System.out.println("Letters only!");
                continue;
            }
            else {
                System.out.println("Hello, " + name);
                break;
            }
        }
    }
}

【讨论】:

    【解决方案2】:

    如果您只是将sc.next 替换为sc.nextLine()。 nextLine 将捕获所有按键直到按下回车。

    【讨论】:

    • sc.next() 读取下一个单词。如果您只有空格或换行符,这些将被消耗,直到它到达下一个单词 +1
    • 谢谢!这有所帮助,但也产生了另一个问题:当用户键入包含空格的名称时,空格被视为非字母。我应该将!name.matches("[a-zA-Z]+") 更改为什么来避免这种情况?
    • 如果我输入Deendayal ,你期待什么?字符串后面有空格。
    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多