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

时间:2016-04-09 16:22:17

标签: java regex string expression

我试图让Java正则表达式尝试使用Scanner System.in函数来验证用户输入。我要验证的是一个用户输入,只能包含字母作为输入,并且可以包含多个单词。如果我输入例如(" Test1")它会抛出一条消息,警告我必须只输入字母,并提示再次输入,但是如果我要输入(&#34) ;测试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和正则表达式的新手,并且一直试图找出一整天都没有成功的错误。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

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

^[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