我正在尝试使用while循环中的正则表达式验证用户输入。我试图只接受一个小写字母(包括字母a-z)。
public class testRedex{
public static void main(String [] args){
Scanner console = new Scanner(System.in);
System.out.print("Please enter a key: ");
while(!console.hasNext("[a-z]+")){
System.out.println("Invalid key");
console.next();
}
String test = console.next();
System.out.println(test);
}
}
我的问题是,将正则表达式作为" [a-z] +"之间是否有任何区别?和" [a-z] + $"?我知道$会在字符串末尾的a-z之间寻找一个字符,但在这种情况下会不会很重要?
答案 0 :(得分:1)
是的,如果您使用以下内容有所不同:^[a-z]+$
这意味着无论用户输入什么,都只能从[a-z]+
合并。
如果您没有添加^
和$
,则用户可以插入其他字符,例如空格,并且仍然会匹配(字符串的第一部分,直到空间。
让我们看一个例子:
^[a-z]+$
并使用相同的输入运行(它打印"无效键")。我重写的方式是:
System.out.print("Please enter a key: ");
String test = console.nextLine();
while (!test.matches("^[a-z]+$")) {
System.out.println("Invalid key");
test = console.nextLine();
}
System.out.println(test);
答案 1 :(得分:0)
差异如下
[a-z]+
表示a,b,c,...或z出现多次
[a-z]+$
表示a,b,c,...或z更多次出现并且必须匹配行的结尾
但最后,他们会给你相同的结果。
如果你想了解它,最好试试这个
([A-Z])([a-z]+$)
以大写字母开头,以不止一次小写字母结束
输出:
Please enter a key: AAAAaaaa
Invalid key
Aaaaaa
Aaaaaa
另一种可以从你想要的东西中获得预期结果的方法
代码:
int i = 0;
String result = "";
do{
Scanner input = new Scanner(System.in);
System.out.println("Enter your key:");
if(input.hasNext("^[a-z]+$")){
result = input.next();
i=1;
}else{
System.out.println("Invalid key");
}
}while(i==0);
System.out.println("the result is " + result);
输出:
Enter your key:
HHHh
Invalid key
Enter your key:
Hellllo
Invalid key
Enter your key:
hello
the result is hello