杰瑞科技汇

Java contains方法是否区分大小写?

String.contains() 方法是区分大小写的。

Java contains方法是否区分大小写?-图1
(图片来源网络,侵删)

这意味着,当你使用 contains() 检查一个字符串是否包含另一个子字符串时,字符的大小写必须完全匹配。


contains() 的基本用法和大小写敏感性

contains() 方法的签名是: boolean contains(CharSequence s)

它接收一个 CharSequence(通常是 String)作为参数,如果调用字符串中包含该参数字符串,则返回 true,否则返回 false

示例:区分大小写

Java contains方法是否区分大小写?-图2
(图片来源网络,侵删)
public class ContainsExample {
    public static void main(String[] args) {
        String mainString = "Hello, World!";
        // 情况1:完全匹配(小写)
        System.out.println(mainString.contains("hello")); // 输出: false
        // 情况2:完全匹配(大写)
        System.out.println(mainString.contains("Hello")); // 输出: true
        // 情况3:部分匹配,但大小写不一致
        System.out.println(mainString.contains("world")); // 输出: false
        // 情况4:部分匹配,大小写一致
        System.out.println(mainString.contains("World")); // 输出: true
        // 情况5:检查不存在的字符
        System.out.println(mainString.contains("Java")); // 输出: false
    }
}

输出结果:

false
true
false
true
false

从上面的例子可以清楚地看到,contains() 对大小写是敏感的。"Hello" 能找到,但 "hello" 找不到。


如何进行不区分大小写的检查?

在实际开发中,我们经常需要进行不区分大小写的检查,有几种常见的方法可以实现。

将两个字符串都转换为统一的大小写(推荐)

这是最常用、最简单、最清晰的方法,你可以将主字符串和要查找的子字符串都转换为小写或大写,然后再进行比较。

Java contains方法是否区分大小写?-图3
(图片来源网络,侵删)

使用 toLowerCase()

String mainString = "Hello, World!";
String subString = "hello";
// 将两个字符串都转换为小写后再检查
boolean isContainsIgnoreCase = mainString.toLowerCase().contains(subString.toLowerCase());
System.out.println(isContainsIgnoreCase); // 输出: true

使用 toUpperCase()

String mainString = "Hello, World!";
String subString = "WORLD";
// 将两个字符串都转换为大写后再检查
boolean isContainsIgnoreCase = mainString.toUpperCase().contains(subString.toUpperCase());
System.out.println(isContainsIgnoreCase); // 输出: true

优点:

  • 代码直观易懂。
  • 性能较好,因为只调用了两次 toLowerCase()/toUpperCase() 方法。

使用 String.indexOf() 方法

String.indexOf(String str) 方法也区分大小写,但它可以接受一个忽略大小写的参数 String str, int fromIndex 的重载形式(实际上没有直接的重载,但我们可以结合 toLowerCase() 或使用正则表达式),更直接的方式是和 toLowerCase() 结合使用。

String mainString = "Hello, World!";
String subString = "world";
// 将主字符串转换为小写,然后在小写版本中查找小写的子字符串
boolean isContainsIgnoreCase = mainString.toLowerCase().indexOf(subString.toLowerCase()) != -1;
System.out.println(isContainsIgnoreCase); // 输出: true

这种方式和方法一原理相同,只是使用了 indexOf() 的返回值来判断。

使用正则表达式(Pattern 和 Matcher)

对于更复杂的匹配规则,正则表达式是一个非常强大的工具,我们可以使用 Pattern.CASE_INSENSITIVE 标志来实现不区分大小写的匹配。

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexContainsExample {
    public static void main(String[] args) {
        String mainString = "Hello, World!";
        String subString = "HELLO";
        // 编译正则表达式,并设置不区分大小写的标志
        Pattern pattern = Pattern.compile(Pattern.quote(subString), Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(mainString);
        // 如果找到匹配项,则返回 true
        boolean isContainsIgnoreCase = matcher.find();
        System.out.println(isContainsIgnoreCase); // 输出: true
    }
}

说明:

  • Pattern.quote(subString) 是一个好习惯,它会将 subString 中的任何特殊正则字符(如 、、 等)进行转义,确保你是在查找字面意义上的字符串,而不是正则表达式模式。
  • 这种方法功能最强大,但代码也最复杂,对于简单的 contains 检查来说有点“杀鸡用牛刀”。

性能比较

对于简单的不区分大小写检查,方法一(toLowerCase().contains())通常是最佳选择,因为它:

  1. 代码简洁:可读性最高。
  2. 性能良好toLowerCase() 的开销很小,对于大多数应用场景来说完全可以接受。

正则表达式方法(方法三)虽然灵活,但在这种简单任务上,其初始化 PatternMatcher 对象的开销会更大。


方法 描述 优点 缺点 推荐场景
contains() 区分大小写 简单、快速 功能有限 当大小写必须严格匹配时
toLowerCase().contains() 不区分大小写 代码简洁、性能好、可读性高 无明显缺点 绝大多数不区分大小写的检查场景
正则表达式 不区分大小写 功能极其强大,可处理复杂模式 代码复杂,性能开销相对较大 需要复杂匹配规则(如查找多个模式、边界等)时

记住这个核心:String.contains() 默认是区分大小写的,当你需要忽略大小时,最简单的方法就是 mainString.toLowerCase().contains(subString.toLowerCase())

分享:
扫描分享到社交APP
上一篇
下一篇