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()。