regionMatches是Java中String类用于高效局部子串比对的方法,支持区分/不区分大小写,不创建新字符串、不依赖正则;需手动校验索引与长度边界,否则抛IndexOutOfBoundsException。

regionMatches 是 Java 中 String 类提供的一个方法,用于**不区分大小写或区分大小写的局部子串比对**,它不创建新字符串、不依赖正则,效率高且语义清晰。
基本用法:指定起始位置和长度比对
该方法有两重载形式,核心参数包括:
- 是否忽略大小写(boolean ignoreCase)
- 当前字符串的比对起始索引(int toffset)
- 待比对字符串(String other)
- other 字符串的比对起始索引(int ooffset)
- 比对的字符数量(int len)
例如判断两个字符串从第 2 位开始、连续 3 个字符是否相同:
String s1 = "HelloWorld"; String s2 = "helloJava"; boolean match = s1.regionMatches(true, 2, s2, 2, 3); // true(忽略大小写,"llo" == "llo")
区分大小写的比对更严格
把第一个参数设为 false 就启用大小写敏感模式:
立即学习“Java免费学习笔记(深入)”;
String a = "Abc"; String b = "abc"; System.out.println(a.regionMatches(false, 0, b, 0, 3)); // false System.out.println(a.regionMatches(true, 0, b, 0, 3)); // true
注意:只影响字母比较,数字、符号不受影响;空字符串或零长度比对总是返回 true(只要索引合法)。
索引和长度的安全边界必须检查
regionMatches 不会自动做越界保护——如果任一索引超出范围,或 toffset + len > this.length(),或 ooffset + len > other.length(),会直接抛 IndexOutOfBoundsException。
安全写法建议提前校验:
if (s1.length() >= start1 + len && s2.length() >= start2 + len) {
return s1.regionMatches(ignoreCase, start1, s2, start2, len);
}
替代方案对比:substring + equals 更直观但有开销
有人习惯写 s1.substring(i, i+len).equals(s2.substring(j, j+len)),这在语义上等价,但会创建两个新字符串对象,GC 压力更大;而 regionMatches 直接遍历原字符数组,无额外对象分配,适合高频或大数据量场景。
另外,它比 String.indexOf 或正则匹配更轻量,专为“已知位置+固定长度”的精准比对设计。


















