[英]Regular Expression in Java: Validating user input
我試圖在while循環中使用正則表達式驗證用戶輸入。 我正在嘗試僅接受一個小寫單詞(包括字母az)。
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);
}
}
我的問題是,使用正則表達式“ [az] +”和“ [az] + $”有什么區別嗎? 我知道$會在字符串末尾的az之間尋找一個字符,但是在這種情況下會重要嗎?
是的,有區別,如果您使用: ^[az]+$
則意味着用戶輸入的任何內容都應僅從[az]+
。
如果您不添加^
和$
則用戶可以插入其他字符,例如空格,並且仍然會有一個匹配項(字符串的第一部分,直到空格為止)。
讓我們來看一個例子:
^[az]+$
並使用相同的輸入運行(它將顯示“ Invalid key”)。 我將其重寫的方式是:
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);
區別如下
[az]+
表示a,b,c,...或z出現多次
[az]+$
表示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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.