3 回答

TA貢獻1820條經驗 獲得超10個贊
String.equalsIgnoreCase 是不區分大小寫的幼稚字符串比較的最實用選擇。
但是,很高興知道此方法既不進行全大小寫折疊也不進行分解,因此無法執行Unicode標準中指定的無大小寫匹配。實際上,JDK API不提供對有關大小寫折疊字符數據的信息的訪問,因此,最好將這項工作委派給一個久經考驗的第三方庫。
該庫是ICU,這是一種實現不區分大小寫的字符串比較的實用程序的方法:
import com.ibm.icu.text.Normalizer2;
// ...
public static boolean equalsIgnoreCase(CharSequence s, CharSequence t) {
Normalizer2 normalizer = Normalizer2.getNFKCCasefoldInstance();
return normalizer.normalize(s).equals(normalizer.normalize(t));
}
String brook = "?u\u0308?chen";
String BROOK = "FLüSSCHEN";
assert equalsIgnoreCase(brook, BROOK);
即使對這種簡單測試String.equalsIgnoreCase,用,或String.equals對大寫或小寫字符串的幼稚比較也會失敗。
(請注意,盡管預定義的案例折疊樣式getNFKCCasefoldInstance是與語言環境無關的;對于土耳其語語言環境,UCharacter.foldCase可能需要進行更多工作。)
添加回答
舉報