问题

我创建了一个Java程序来比较两个字符串:

String s1 = "Hello";
String s2 = "hello";

if (s1.equals(s2)) {
    System.out.println("hai");
} else {
    System.out.println("welcome");
}

它显示"欢迎"。我知道它区分大小写。但我的问题是我想要比较两个没有区分大小写的字符串。即我预计输出为hai


#1 热门回答(152 赞)

  • 最好的是使用s1.equalsIgnoreCase(s2):(参见javadoc)
  • 你也可以将它们转换为大写/小写并使用s1.equals(s2)

#2 热门回答(40 赞)

useString.equalsIgnoreCase()

使用Java API参考来查找这些答案。
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String)http://java.sun.com/j2se/1.5.0/docs/api/


#3 热门回答(20 赞)

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 = "flu\u0308ßchen";
    String BROOK = "FLÜSSCHEN";

    assert equalsIgnoreCase(brook, BROOK);

即使是这个简单的测试,与String.equalsIgnoreCase,或者String.equals在上层或下层字符串上进行天真的比较也会失败。

(请注意,虽然预定义的案例折叠flavourgetNFKCCasefoldInstance是与语言环境无关的;对于土耳其语语言环境,需要更多的工作涉及UCharacter.foldCase。)


原文链接