在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 许可协议
尝试
或者
根据 Java _正则表达式_,
+
表示“一次或多次”,而\d
表示“一个数字”。注意:“双反斜杠”是获得单个反斜杠的 转义序列- 因此,java String 中的
\\d
会为您提供实际结果:\d
参考:
Java 正则表达式
Java 字符转义序列
编辑: 由于其他答案有些混乱,我正在编写一个测试用例,并将详细解释更多内容。
首先,如果您对此解决方案(或其他解决方案)的正确性有疑问,请运行此测试用例:
问题一:
不。 在java中,
matches
方法(在问题中指定)匹配完整的字符串,而不是片段。换句话说,没有必要使用^\\d+$
(即使它也是正确的)。请参阅最后一个否定测试用例。请注意,如果您使用在线“正则表达式检查器”,则其行为可能会有所不同。要在 Java 中匹配字符串的片段,您可以改用
find
方法,此处详细描述:Java Regex中matches()和find()的区别
问题2:
不会。正则表达式 ---
\\d*
会匹配空字符串,但\\d+
不会。星*
表示零或多个,而加号+
表示一个或多个。请参阅第一个否定测试用例。问题 3
是的。 编译一次正则表达式模式确实更快,而不是每次调用
matches
,因此如果性能影响很重要,那么Pattern
可以像这样编译和使用: