String.regionMatches()是Java中高效比较字符串指定区域是否相等的方法,支持忽略大小写,适用于局部不区分大小写的匹配校验,如校验文件后缀或URL路径前缀,且避免创建临时对象。

String.regionMatches() 是 Java 中用于比较字符串指定区域是否相等的高效方法,它支持忽略大小写的比对,适合做局部范围的、不区分大小写的匹配校验。
核心用法:启用忽略大小写的 regionMatches
调用带 ignoreCase 参数的重载版本:
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)-
ignoreCase = true表示忽略大小写(内部使用Character.toLowerCase()等效逻辑) -
toffset:当前字符串中比对起始位置(从 0 开始) -
other:被比对的另一个字符串 -
ooffset:other字符串中比对起始位置 -
len:要比较的字符个数(长度),超出任一字符串边界则直接返回false
典型校验场景与写法示例
比如校验某个字符串末尾是否以不区分大小写的 "pdf" 结尾:
- 先检查长度是否足够:
str.length() >= 3 - 再调用:
str.regionMatches(true, str.length() - 3, "pdf", 0, 3)
又如校验 URL 路径开头是否为不区分大小写的 "/api/":
url.regionMatches(true, 0, "/api/", 0, 5)- 注意长度传
5,不是"/api/".length()的硬编码(虽值相同,但建议显式计算或用常量提升可读性)
注意事项与常见陷阱
- 不会自动处理空格、Unicode 正规化或全角/半角;仅做逐字符的
toLowerCase()映射后比对 - 若
len ,直接抛 <code>IllegalArgumentException;务必确保非负 - 越界安全:只要任一端剩余长度不足
len,立即返回false,无需手动预判边界(但提前判断长度可避免无效调用) - 和
String.equalsIgnoreCase()不同,regionMatches不要求整串等长,只关注指定区间
替代方案对比(为什么选 regionMatches)
- 不用
substring().equalsIgnoreCase():避免创建临时子串对象,内存更友好,尤其在高频校验中 - 不用正则(如
Pattern.compile("(?i)pdf$", Pattern.LITERAL)):无编译开销、无回溯风险、语义更直白 - 比手写循环调用
Character.toLowerCase()更简洁、不易出错

















