【发布时间】:2019-11-15 18:33:46
【问题描述】:
下面的代码我试图只接受数字 (0-9) 和“-”作为输入来设置我的帐号。
如果用户输入无效输入,如果输入有效,程序应该抛出异常程序应该继续第二层条件(isCheckDigitCorrect()是另一种带有算法的方法,此时该方法无关紧要)如果第二个条件也成立,我的程序应该继续设置帐号,否则抛出异常。
问题是,我的 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"
);
}
}
【问题讨论】:
-
为什么要重新分配方法参数作为第一个操作?为什么不只是
String accountNumber = keyboard.nextLine()? -
除了您遇到的任何 Java 问题之外,您的正则表达式将为
1-2-3-4-5、-、-34534、24534534-、-2334-等内容提供正则匹配。 . 您可能希望将您的正则表达式切换为^[0-9]+(?:-[0-9]+)?$ -
嗨 Gwaithim,欢迎来到 SO!询问时,记得关注Minimal, Reproducible Example principal。例如,您没有写出您是如何启动
keyboard变量的,这可能是您问题的关键点之一。您还应从您的代码中删除所有不相关的代码和描述。好的格式也能创造奇迹……