Java - 异常处理 - 正则表达式 - 匹配方法不适用于扫描仪输入

标签 java regex exception

下面的代码我尝试仅接受数字(0-9)和“-”作为输入来设置我的帐号。

如果用户输入无效输入,程序应该抛出异常(如果输入有效)程序应该继续进行第二层条件处理(isCheckDigitCorrect()是另一种带有算法的方法,此时该方法无关紧要),如果第二个条件也成立,我的程序应该继续并设置帐号,否则抛出异常。

问题是,我的 if 语句总是返回 false。
我尝试调试以查看我的正则表达式模式是否正确,我发现如果我声明一个字符串,即 "123-123456",它会与返回 true 的模式匹配。

但是,如果我输入与声明的正则表达式模式相同的输入,即 input accountNumber="123-123456" 我的测试变量将返回 false。
这里可能存在什么问题?我该如何解决这个问题?

提前致谢。 (图片为我的调试描述)

debugging output sample

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

以类似的方式,您还应该确保代码中的字符 - 与您从键盘 中获得的字符确实匹配。请参阅 different hyphens and dashes

关于Java - 异常处理 - 正则表达式 - 匹配方法不适用于扫描仪输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58882824/

相关文章:

java - Mule 如何处理不符合其 XML 模式的 XML 配置?

java - 未知方法 foo 的输出

java - 尝试解析 xml 文件但在部署的 GAE 中出现 java.security.AccessControlException

jquery - 没有办法将正则表达式应用于时间输入

Java- 不包含后跟任何字符的子字符串的字符串的正则表达式

c++ - 扩展 std::exception 类:程序不会执行适当的 catch 处理程序

c++ - 从 std::exception 继承的正确方法

c# - XDocument.Save() 时出现内存异常

java - 来自类定义的 GUI

java - 将字符串拆分为数组的 n 个长度元素