下面的代码我尝试仅接受数字(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"
);
}
}
最佳答案
我猜想无论您的 keyboard.nextLine()
做什么,它可能不仅返回 123-123456
(以您的示例为例),还返回字符串末尾或开头的其他空白字符。由于正则表达式 ^[0-9-]+$
不允许任何空格字符,因此在这种情况下 matches()
方法会返回 false
。
以类似的方式,您还应该确保代码中的字符 -
与您从键盘
中获得的字符确实匹配。请参阅 different hyphens and dashes 。
关于Java - 异常处理 - 正则表达式 - 匹配方法不适用于扫描仪输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58882824/