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

时间:2017-11-03 12:50:48

标签: java string user-input

我已经通过一种方法向用户询问他们的名字。如果用户没有输入任何文本,则应再次询问。我已经开始工作,但如果用户输入了一个数字,它仍会打印出来。如何阻止用户输入数字?

这是我的代码

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;

}

}

4 个答案:

答案 0 :(得分:1)

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

footer_html = Tempfile.new(['footer_html', '.html'])
footer_html.write(render_to_string(partial: 'pdf/footer'))
footer_html.close
kit =
  PDFKit.new(render_to_string('pdf/show',
                              layout: false,
                              footer_html: footer_html.path)

pdf_inline = kit.to_pdf
footer_html.unlink
pdf_inline

答案 1 :(得分:0)

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

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("")

答案 2 :(得分:0)

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

  

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

所以你的代码将是:

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

另一种方法是使用hasNext(Pattern)方法,其模式只匹配字母字符串。

答案 3 :(得分:0)

如果您能够,您还可以使用ApacheCommons之类的第三方库,并使用他们的StringUtils.isAlpha()方法。

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