string.matches()用于全字符串正则校验,自动添加^和$,需双反斜杠转义,空值需判空,高频场景建议预编译pattern。

用 String.matches() 方法最直接,它专为全字符串正则校验设计,返回 boolean 值。
matches() 是全匹配,不是找子串
它要求整个字符串从头到尾都符合正则,等价于在正则前后自动加上 ^ 和 $,不需要手动写。
-
"123".matches("\d+")→ true(全是数字) -
"abc123".matches("\d+")→ false(开头有字母) -
"hello".matches("he.*o")→ true(从 h 开始、到 o 结束) -
"hello world".matches("he.*o")→ false(后面还有空格和 word)
注意 Java 字符串里的转义
正则中的反斜杠在 Java 字符串中要写成双反斜杠 ,否则编译不通过或语义错误。
- 匹配数字:
"\d+"(不是"d+") - 匹配小数点:
"\d+\.\d+"(.是元字符,必须转义) - 匹配邮箱:
"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$"
安全与性能要点
校验前需判空,且高频使用建议预编译 Pattern。
-
null调用 matches 会抛NullPointerException,应先检查:str != null && str.matches(regex) - 空字符串
""可以调用,是否匹配取决于正则(如"".matches("a*")是 true,"".matches("a+")是 false) - 同一正则反复校验时,用
Pattern.compile(regex).matcher(str).matches()更高效,避免重复编译
需要部分匹配时换方法
如果目标是“包含某模式”或“从开头匹配”,不要用 matches:
- 检查是否**包含**:用
Pattern.compile("regex").matcher(str).find() - 检查是否**从开头匹配**(不要求到结尾):用
.lookingAt()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











