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

新手上路,请多包涵

在Java for String 类中有一个称为matches 的方法,如何使用此方法使用正则表达式检查我的字符串是否只有数字。我尝试了以下示例,但它们都返回了错误的结果。

 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));

原文由 Chaitanya 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 730
2 个回答

尝试

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

或者

String regex = "\\d+";

根据 Java _正则表达式_, + 表示“一次或多次”,而 \d 表示“一个数字”。

注意:“双反斜杠”是获得单个反斜杠的 转义序列- 因此,java String 中的 \\d 会为您提供实际结果: \d

参考:


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

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

 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));

问题一:

是不是有必要添加 ^$ 到正则表达式,所以它不会匹配 “aa123bb” ?

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

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

Java Regex中matches()和find()的区别

问题2:

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

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

问题 3

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

是的。 编译一次正则表达式模式确实更快,而不是每次调用 matches ,因此如果性能影响很重要,那么 Pattern 可以像这样编译和使用:

 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());

原文由 vikingsteve 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题