我正在尝试检查我的 teleInput 字符串中的子字符串是否包含数字,但我似乎无法让它返回 true。结果总是以错误告终,我做错了什么。
String teleInput = "(555)555-5555";
boolean returntT = teleInput.substring(1,3).matches(".*[0-9].*");
我是一个极端的初学者,所以我不知道我是否遗漏了一些明显的东西,比如混合方法,或者我的其余代码可能有问题,无论哪种方式,我都非常感谢你的帮助!
您的问题是您的子字符串 - 您只返回两个字符:第二个参数是索引,但不包括最后一个字符。要获得 3 个字符,您需要:
teleInput.substring(1,4)
所以试试这个(注意匹配只需要检查它是“所有数字”,因为长度已经知道是3):
teleInput.substring(1,4).matches("\\d*");
或者只是忘记子字符串并单独使用匹配项:
teleInput.matches(".\\d{3}.*");
这是“任何字符,然后是 3 个数字,然后是任何东西”的正则表达式。
但是您可以在一行中验证整个输入:
teleInput.matches("(.\\d{3}){3}\\d");
您可能需要阅读正则表达式才能理解这种模式,但它确实有效!
注意:matches() 必须匹配整个字符串才为真。
而不是这一行:
boolean returntT = teleInput.substring(1,3).matches(".*[0-9].*");
你应该这样做:
boolean returntT = teleInput.substring(1,3).matches("[0-9]+");
或这个:
boolean returntT = teleInput.substring(1,3).matches("\\d{2}");
正则表达式[0-9]+
将确保给定的输入中只有 1 个或多个数字。有关正则表达式的好教程,请阅读:http ://www.regular-expressions.info/
如果要检查字符串中的第二个字符是否为数字,可以这样做:
String teleInput = "(555)555-5555";
boolean returntT = teleInput.substring(1,2).matches("[0-9]");