String.regionMatches()是Java中高效轻量的局部字符串比对方法,支持忽略大小写的子串校验,无需创建新字符串、自动越界防护、零对象分配,且len为0时恒返回true,但other为null会抛NullPointerException。

String.regionMatches() 是 Java 中一个高效、轻量的局部字符串比对方法,特别适合在不创建新字符串的前提下完成忽略大小写的子串校验。
核心用法:启用忽略大小写的区域匹配
使用带 ignoreCase 参数的重载版本:
- boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
-
ignoreCase = true 表示忽略大小写(内部调用
Character.toLowerCase()逐字符比较) - toffset:当前字符串中比对起始位置(从 0 开始)
- other:待比对的另一个字符串
- ooffset:other 字符串中的起始位置
- len:要比较的字符数量(长度),超出任一字符串边界会直接返回 false
实际校验示例:验证邮箱用户名是否以特定前缀开头(忽略大小写)
比如检查 "User123@gmail.com" 的用户名部分(@ 前)是否以 "user" 开头:
String email = "User123@gmail.com";
int atPos = email.indexOf('@');
if (atPos > 0) {
boolean startsWithUser = email.regionMatches(true, 0, "user", 0, 4);
// 返回 true —— 因为 "User" 和 "user" 前 4 字符忽略大小写后一致
}
注意:无需提前转小写或截取子串,避免了额外对象开销和边界判断错误风险。
立即学习“Java免费学习笔记(深入)”;
安全使用要点
- 方法内部自动检查索引越界(
toffset、ooffset、长度是否超出各自字符串长度),越界直接返回 false,无需手动防御 - 若
len == 0,始终返回 true(空区域视为相等) - 当
other为 null,会抛出 NullPointerException,调用前建议判空 - 仅做字符级比较,不支持正则、通配符或 Unicode 折叠(如不处理 'ß' ≡ "ss" 这类语义等价)
对比 substring + equalsIgnoreCase 的劣势
常见误写:email.substring(0, 4).equalsIgnoreCase("user")
- 可能抛 StringIndexOutOfBoundsException(需先判断
email.length() >= 4) - 必然创建新的子字符串对象,增加 GC 压力
- 而
regionMatches零分配、一次遍历、自带越界防护,更简洁可靠


















