如何检查字符串在Java中是否仅包含数字

在Java forString类中,有一个称为matchs的方法,该方法如何使用正则表达式检查我的字符串是否只有数字。我尝试了以下示例,但它们均使我返回了false。

String regex = "[0-9]";

String data = "23343453";

System.out.println(data.matches(regex));


String regex = "^[0-9]";

String data = "23343453";

System.out.println(data.matches(regex));

回答:

尝试

String regex = "[0-9]+";

要么

String regex = "\\d+";

按照Java 正则表达式 ,其 +含义是“一次或多次”,并且其\d含义是“数字”。

注意:“双反斜杠”是一个 转义序列, 用于获取单个反斜杠-因此,\\d在Java字符串中会提供实际结果:\d

  • Java正则表达式

  • Java字符转义序列


由于其他答案有些混乱,我正在编写一个测试用例,并将详细解释一些其他内容。

首先,如果您对该解决方案(或其他解决方案)的正确性有疑问,请运行以下测试案例:

String regex = "\\d+";

// positive test cases, should all be "true"

System.out.println("1".matches(regex));

System.out.println("12345".matches(regex));

System.out.println("123456789".matches(regex));

// negative test cases, should all be "false"

System.out.println("".matches(regex));

System.out.println("foo".matches(regex));

System.out.println("aa123bb".matches(regex));

回答:

不一定要在regex中添加^$,所以它不匹配“ aa123bb”吗?

在Java中,matches方法(在问题中指定)匹配完整的字符串,而不是片段。换句话说,没有必要使用^\\d+$(即使它也是正确的)。请查看最后一个否定测试用例。

请注意,如果您使用在线“正则表达式检查器”,则其行为可能有所不同。要匹配Java中字符串的片段,您可以改用find方法,在此进行详细说明:

Java

Regex中match()和find()之间的区别

回答:

这个正则表达式也不会匹配空字符串""吗?*

。正则表达式\\d*将匹配空字符串,但\\d+不匹配。星号*表示零或多个,而加号+表示一个或多个。请参阅第一个否定测试用例。

回答:

编译正则表达式模式不是更快吗?

确实,一次编译正则表达式模式比在每次调用regex模式时都要快matches,因此,如果性能影响很重要,则Pattern可以像这样编译和使用a :

Pattern pattern = Pattern.compile(regex);

System.out.println(pattern.matcher("1").matches());

System.out.println(pattern.matcher("12345").matches());

System.out.println(pattern.matcher("123456789").matches());

以上是 如何检查字符串在Java中是否仅包含数字 的全部内容, 来源链接: utcz.com/qa/414083.html

回到顶部