[英]Java Scanner hasNext() string regex validation
我正在嘗試使用 Java 正則表達式來嘗試使用Scanner
System.in
函數驗證用戶輸入。 我試圖驗證的是一個用戶輸入,它只能包含字母作為輸入,並且可以包含多個單詞。 例如,如果我輸入 ("Test1") 它會拋出一條消息,警告我必須只輸入字母,並提示我再次輸入,但是如果我要輸入 ("Test1"),那么它會通過我的正則表達式,似乎是空間導致了這個問題,但是在我的正則表達式中添加一個空格並沒有解決我的問題。 任何幫助將不勝感激。 以下是我的代碼中存在問題的部分:
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 和 regex 的新手,並且一整天都在試圖找出出了什么問題,但沒有成功。
感謝您的時間。
您需要做的就是在[]
添加一個空格。 我還建議使用^
(聲明它必須是字符串的開頭)和$
(用於字符串的結尾):
^[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
語句中刪除!
)
hasNext(pattern)
將根據 Regex 模式匹配下一個完整的標記。 根據此方法文檔getCompleteTokenInBuffer(Pattern pattern)
from Scanner
如果被 delims 包圍,則令牌是完整的; 部分標記以 delims 為前綴,但不以它們為后綴。
問題是Scanner
使用的默認分隔符是space
,因為只有空格之前的字符串才會針對模式進行測試。
Scanner scanner = new Scanner(inputStream).useDelimiter("\\n");
在上面的掃描器上調用hasNext(pattern)
將匹配整個行的模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.