如何检查用户的输入是字符串而不是数字



我得到了一个练习,使用一种方法询问用户的名字。如果用户未输入任何文本,则应再次询问他们。我已经让它工作了,但如果用户输入一个数字,它仍然会打印出来。如何阻止用户输入号码?

这是我下面的代码

public static void main(String[] args) {
    // call method
    System.out.println("Hello " + getName());
}
public static String getName() {
    // input a scanner
    Scanner scanner = new Scanner(System.in);
    // declare vars
    String userName = "";
    // while loop
    while (userName.equals("")) {
        // ask user for input
        System.out.println("What is your name?");
        userName = scanner.nextLine();
    }
    scanner.close();
    return userName;
}

}

使用正则表达式的最佳方式。

String namePattern = "[^\p{P}|^\d+]+";
//true if name contains only alphabets, false - otherwise
boolean result = userName.matches(namePattern);

由于正则表达式通常很慢,因此非正则表达式解决方案将是:

boolean containsDigit(final String string) {
    boolean result = false;
    if (string == null || string.isEmpty()) {
        return result;
    }
    char[] characters = string.toCharArray();
    for (char character : characters) {
        if (Character.isDigit(character)) {
            result = true;
            break;
        }
    }
    return result;
}

这将导致以下 while 循环

while (userName.equals("") || containsDigit(userName)) {
    ...
}

注意:更清洁的替代方案是使用username.isEmpty()而不是username.equals("")

如果

可以的话,你也可以使用像ApacheCommons这样的第三方库,并使用他们的StringUtils.isAlpha()方法。

isAlpha() 方法还会检查提供的字符串是null还是空。

Well Scanner有几种方法来处理用户输入。可用于检查用户输入是否为int的方法之一是hasNextInt()

如果可以使用 nextInt() 方法将此扫描程序输入中的下一个标记解释为指定基数中的 int 值,则返回 true。

所以你的代码将是:

if(!scanner.hasNextInt()){
     userName = scanner.nextLine();
}

另一种方法是将hasNext(Pattern)方法与仅匹配字母字符串的模式一起使用。

相关内容

  • 没有找到相关文章

最新更新