[英]Java - Exception Handling - Regex - Matches method does not work with scanner input
下面的代碼我試圖只接受數字(0-9)和“-”作為輸入來設置我的帳號。
如果用戶輸入了無效的輸入,程序應該拋出異常如果它是有效的輸入程序應該 go 在第二層條件之前( isCheckDigitCorrect()
是另一種帶有算法的方法,此時該方法無關緊要)如果第二個條件也是如此,我的程序應該提前 go 並設置帳號否則拋出異常。
問題是,我的 if 語句總是返回 false。
我嘗試調試以查看我的正則表達式模式是否正確,我發現如果我聲明一個字符串,即"123-123456"
,它與返回 true 的模式匹配。
但是,如果我輸入與聲明的正則表達式模式相同的輸入,即input accountNumber="123-123456"
我的測試變量將返回 false。
這里可能是什么問題? 我怎樣才能解決這個問題?
提前致謝。 (用於描述我的調試的圖像)
private void setAccountNumber(String accountNumber) {
accountNumber = keyboard.nextLine();
String regex = "123-123456";
boolean test = regex.matches("^[0-9-]+$");
if(accountNumber.matches("^[0-9-]+$")) {
if(isCheckDigitCorrect(accountNumber)) { this.accountNumber = accountNumber;
} else { throw new
BadAccountInputException(" Bad account number; check digit failed."); }
} else { throw new
BadAccountInputException("Account number must consists of numbers separated by -, other non-numeric characters not allowed"
);
}
}
我猜無論您的keyboard.nextLine()
做什么,它可能不僅返回123-123456
(以您為例),而且還返回字符串末尾或開頭的其他空白字符。 由於您的正則表達式^[0-9-]+$
不允許任何空格字符,因此在這些情況下, matches()
方法會返回false
。
以類似的方式,您還應該確保代碼中的字符-
確實與您從keyboard
獲得的字符匹配。 查看不同的連字符和破折號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.