簡體   English   中英

Java Scanner hasNext() 字符串正則表達式驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM