【问题标题】:Java - Exception Handling - Regex - Matches method does not work with scanner inputJava - 异常处理 - 正则表达式 - 匹配方法不适用于扫描仪输入
【发布时间】:2019-11-15 18:33:46
【问题描述】:

下面的代码我试图只接受数字 (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"
      );


      }

      }

【问题讨论】:

  • 为什么要重新分配方法参数作为第一个操作?为什么不只是String accountNumber = keyboard.nextLine()
  • 除了您遇到的任何 Java 问题之外,您的正则表达式将为 1-2-3-4-5--3453424534534--2334- 等内容提供正则匹配。 . 您可能希望将您的正则表达式切换为^[0-9]+(?:-[0-9]+)?$
  • 嗨 Gwaithim,欢迎来到 SO!询问时,记得关注Minimal, Reproducible Example principal。例如,您没有写出您是如何启动keyboard 变量的,这可能是您问题的关键点之一。您还应从您的代码中删除所有不相关的代码和描述。好的格式也能创造奇迹……

标签: java regex exception


【解决方案1】:

我猜无论您的keyboard.nextLine() 做什么,它可能不仅返回123-123456(以您为例),而且还返回字符串末尾或开头的其他空白字符。由于您的正则表达式 ^[0-9-]+$ 不允许任何空格字符,因此 matches() 方法在这些情况下返回 false

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

【讨论】:

  • 我也觉得会这样,有朋友建议用 trim() 方法去掉空白即 accountNumber.trim().matches("^[0-9-] +$");但这仍然没有解决问题。
  • 好的,那么- 并不总是-?见en.wikipedia.org/wiki/Wikipedia:Hyphens_and_dashes。无论如何,我建议您真正调试您的代码(在断点处停止它并调查变量的内容)。那么你肯定应该找到罪魁祸首......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 2017-09-04
  • 2016-10-10
  • 2012-09-17
  • 2015-02-07
  • 2012-01-06
相关资源
最近更新 更多