问题
我创建了一个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
。)