Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-Exception Handling-Regex-Matches方法不适用于扫描仪输入_Java_Regex_Exception - Fatal编程技术网

Java-Exception Handling-Regex-Matches方法不适用于扫描仪输入

Java-Exception Handling-Regex-Matches方法不适用于扫描仪输入,java,regex,exception,Java,Regex,Exception,下面的代码我尝试只接受数字(0-9)和“-”作为输入来设置我的帐号 如果用户输入无效的输入,程序应该抛出一个异常,如果它是有效的输入,程序应该继续进行第二层条件处理(isCheckDigitCorrect()是另一个带有算法的方法,此时该方法不相关)如果第二个条件也是真的,我的程序应该继续设置帐号,否则会抛出异常 问题是,我的if语句总是返回false。 我试着调试我的正则表达式模式是否正确,我发现如果我声明一个字符串,即“123-123456”,它与返回true的模式匹配 但是,如果我输入与声

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

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

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

但是,如果我输入与声明的正则表达式模式相同的输入,即
input accountNumber=“123-123456”
我的测试变量返回false。
这里会出现什么问题?我怎样才能解决这个问题

提前谢谢。(用于描述我的调试的图像)


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


同样,您还应该确保代码中的字符
-
与您从
键盘中获得的字符真正匹配。请参阅。

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


同样,您还应该确保代码中的字符
-
与您从
键盘中获得的字符真正匹配。请参阅。

为什么将方法参数重新分配为第一个操作?为什么不仅仅是
String accountNumber=keyboard.nextLine()
?除了您遇到的任何Java问题之外,您的正则表达式将为
1-2-3-4-5
、just
-
-34534
24534534-
-2334-
等内容提供积极的匹配。。您可能希望将正则表达式切换为
^[0-9]+(?:-[0-9]+)?$
您好,欢迎使用SO!问问题时,记得要按照要求去做。例如,您没有编写如何启动
键盘
变量,这可能是问题的关键点之一。您还应删除代码中所有不相关的代码和描述。好的格式也会创造奇迹……为什么要将方法参数重新分配为第一个操作?为什么不仅仅是
String accountNumber=keyboard.nextLine()
?除了您遇到的任何Java问题之外,您的正则表达式将为
1-2-3-4-5
、just
-
-34534
24534534-
-2334-
等内容提供积极的匹配。。您可能希望将正则表达式切换为
^[0-9]+(?:-[0-9]+)?$
您好,欢迎使用SO!问问题时,记得要按照要求去做。例如,您没有编写如何启动
键盘
变量,这可能是问题的关键点之一。您还应删除代码中所有不相关的代码和描述。一个好的格式也能创造奇迹……我也认为会是这样,一位朋友建议使用trim()方法来消除空白,即accountNumber.trim().matches(“^[0-9-]+$”;但这仍然没有解决问题。好吧,那么也许
-
并不总是
-
?看见无论如何,我建议您真正地调试代码(在断点上停止它并调查变量的内容)。你一定会找到罪魁祸首的……我也认为会是这样,一位朋友建议使用trim()方法去除空白,即accountNumber.trim().matches(“^[0-9-]+$”;但这仍然没有解决问题。好吧,那么也许
-
并不总是
-
?看见无论如何,我建议您真正地调试代码(在断点上停止它并调查变量的内容)。那你一定要找到罪犯。。。
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"
      );


      }

      }