HOWTO · Java

Java 中忽略大写和小写

本文介绍如何在 Java 中忽略大小写。

本页内容

要判断两个 Java 字符串是否相等且不区分字母大小写,请调用 equalsIgnoreCase()。如果后续处理需要规范化后的字符串,可以先调用 toUpperCase() 或 toLowerCase(),再使用 equals() 比较。需要进行不区分大小写的排序时,请使用 compareToIgnoreCase()。

Java String 是不可变的,因此 toUpperCase() 和 toLowerCase() 会返回包含转换后内容的 String,而不会改变原始值。这些方法和 equalsIgnoreCase() 使用 Java 的大小写映射,但不提供完整的、针对特定语言的 Unicode 大小写折叠。请根据需求选择方法:判断是否相等、获取规范化后的值,或进行排序。

在 Java 中使用 toUpperCase() 方法忽略大小写

对两个字符串分别调用 toUpperCase(Locale.ROOT),然后使用 equals() 比较转换结果。Locale.ROOT 可让转换不受机器默认区域设置影响,适合标识符等程序化规范化场景。处理普通 ASCII 示例并不需要将默认区域设置为英语或美国英语。

import java.util.Locale;

public class UppercaseComparison {
    public static void main(String[] args) {
        String first = "icecream";
        String second = "IceCream";

        String normalizedFirst = first.toUpperCase(Locale.ROOT);
        String normalizedSecond = second.toUpperCase(Locale.ROOT);
        boolean equalIgnoringCase = normalizedFirst.equals(normalizedSecond);

        System.out.println(equalIgnoringCase);
    }
}

这种方法会比较转换后返回的 String 值。如果转换是为了让程序之间进行比较,请使用 Locale.ROOT;对于需要遵循特定区域语言规则的文本处理,可能需要采用其他设计。

在 Java 中使用 toLowerCase() 方法忽略大小写

小写规范化的做法相同:分别对两个字符串调用 toLowerCase(Locale.ROOT),然后使用 equals() 比较。显式指定区域设置可避免结果受用户默认区域设置影响。如果后续操作也需要规范化后的小写值,可以使用这种方式;如果只需直接判断是否相等,使用 equalsIgnoreCase() 更简单。

import java.util.Locale;

public class LowercaseComparison {
    public static void main(String[] args) {
        String first = "icecream";
        String second = "IceCream";

        String normalizedFirst = first.toLowerCase(Locale.ROOT);
        String normalizedSecond = second.toLowerCase(Locale.ROOT);
        boolean equalIgnoringCase = normalizedFirst.equals(normalizedSecond);

        System.out.println(equalIgnoringCase);
    }
}

与转换为大写一样,toLowerCase() 会返回包含转换后内容的 String,而不会改变原始值;它不能替代针对特定语言的 Unicode 大小写折叠。

在 Java 中使用 equalsIgnoreCase() 方法忽略大小写

要直接判断两个字符串是否相等,请在一个字符串上调用 equalsIgnoreCase(),并将另一个字符串作为参数传入。该方法返回布尔值:如果按照 Java 的不区分大小写比较规则,两个字符串相等,则返回 true;否则返回 false。例如,"icecream".equalsIgnoreCase("IceCream") 的结果为 true。

public class IgnoreCaseEquality {
    public static void main(String[] args) {
        String first = "icecream";
        String second = "IceCream";

        boolean equalIgnoringCase = first.equalsIgnoreCase(second);
        System.out.println(equalIgnoringCase);
    }
}

这种比较不会针对特定语言或区域设置进行调整,也不执行完整的 Unicode 大小写折叠。如果应用需要遵循语言学匹配规则,请使用为此需求设计的 API,不要假定该方法适用于所有语言的文本规则。

在 Java 中使用 compareToIgnoreCase() 方法忽略大小写

需要进行不区分大小写的字典序排序时(例如对字符串排序),请使用 compareToIgnoreCase()。结果为零表示两个字符串在忽略大小写后相等。结果为负数表示第一个字符串排在第二个字符串之前;结果为正数则表示排在之后。返回的非零整数不保证等于两个字符串中第一个不同字符的差值。

public class IgnoreCaseOrdering {
    public static void main(String[] args) {
        String first = "apple";
        String second = "Banana";

        int comparison = first.compareToIgnoreCase(second);
        System.out.println(comparison < 0);
    }
}

示例会输出一个布尔值,表示两者是否符合指定的排序关系。如果只需要判断是否相等,请改用 equalsIgnoreCase()。