簡體   English   中英

Java - 異常處理 - 正則表達式 - 匹配方法不適用於掃描儀輸入

[英]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。
這里可能是什么問題? 我怎樣才能解決這個問題?

提前致謝。 (用於描述我的調試的圖像)

調試output樣品

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.

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