Java Scanner hasNext() 字符串正则表达式验证

标签 java regex string expression

我正在尝试使用 Java 正则表达式来尝试使用 Scanner System.in 函数验证用户输入。我试图验证的是一种用户输入,该输入只能包含字母作为输入,并且可以包含多个单词。例如,如果我输入(“Test1”),它会弹出一条消息,警告我只能输入字母,并提示再次输入,但是如果我输入(“Test 1”),那么它会通过我的正则表达式,似乎是空格导致了这个问题,但是在我的正则表达式中添加空格并没有解决我的问题。任何帮助将不胜感激。以下是我的代码中存在问题的部分:

System.out.println("Please enter the your name: ");

while(!input.hasNext("[a-zA-Z]+")){

    System.out.println("Your name must consist of only letters");
    input.nextLine();

}

String name = input.nextLine();

这对某些人来说可能显然是错误的,但我对 Java 和正则表达式很陌生,并且一整天都在试图找出问题所在,但没有成功。

感谢您的宝贵时间。

最佳答案

您所需要做的就是在[]内添加一个空格。我还建议使用 ^ (表示它必须是字符串的开头)和 $ (表示字符串的结尾):

^[a-zA-Z ]+$

您还可以使用\s来选择所有空白,例如Tab

您的完整代码:

System.out.println("Please enter the your name: ");

while(!input.hasNext("^[a-zA-Z ]+$")){
    System.out.println("Your name must consist of only letters");
    input.nextLine();
}

String name = input.nextLine();

如果您想允许使用 * 等符号,那么所有数字都可以。您可以使用 \d+。如果匹配,则打印出错误(您需要删除 while 语句中的 !)

关于Java Scanner hasNext() 字符串正则表达式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36519518/

相关文章:

c# - 如何从字符串创建名称为对象的对象?

regex - 查找以具有特定模式的下划线开头的单词的换行符

javascript - 如何匹配 url 中可以以查询字符串结尾的文件扩展名?

python - 为什么我的程序无法检测大写字符?

java - 如何将多边形旋转给定角度

javascript - 获取匹配项和非匹配项的数组

java - 字符串到 XMLGregorianCalendar 问题

java - 使用 javax.lang.model 或 ANTLR JavaParser 获取 Java 源代码信息的示例/教程

java - 安排 Activity 日历的最佳 Swing 解决方案

java - 是否可以监听 JTable 中特定列的数据变化?