0

我正在尝试检查我的 teleInput 字符串中的子字符串是否包含数字,但我似乎无法让它返回 true。结果总是以错误告终,我做错了什么。

String teleInput = "(555)555-5555";
boolean returntT = teleInput.substring(1,3).matches(".*[0-9].*");

我是一个极端的初学者,所以我不知道我是否遗漏了一些明显的东西,比如混合方法,或者我的其余代码可能有问题,无论哪种方式,我都非常感谢你的帮助!

4

3 回答 3

2

您的问题是您的子字符串 - 您只返回两个字符:第二个参数是索引,但不包括最后一个字符。要获得 3 个字符,您需要:

teleInput.substring(1,4)

所以试试这个(注意匹配只需要检查它是“所有数字”,因为长度已经知道是3):

teleInput.substring(1,4).matches("\\d*");

或者只是忘记子字符串并单独使用匹配项:

teleInput.matches(".\\d{3}.*");

这是“任何字符,然后是 3 个数字,然后是任何东西”的正则表达式。

但是您可以在一行中验证整个输入:

teleInput.matches("(.\\d{3}){3}\\d");

您可能需要阅读正则表达式才能理解这种模式,但它确实有效!


注意:matches() 必须匹配整个字符串才为真。

于 2013-08-09T21:29:59.913 回答
0

而不是这一行:

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/

于 2013-08-09T21:22:47.427 回答
0

如果要检查字符串中的第二个字符是否为数字,可以这样做:

String teleInput = "(555)555-5555";

boolean returntT = teleInput.substring(1,2).matches("[0-9]");
于 2013-03-20T07:45:10.800 回答