为了账号安全,请及时绑定邮箱和手机立即绑定

如何使我的字符串比较不区分大小写?

如何使我的字符串比较不区分大小写?

慕工程0101907 2019-11-28 10:32:26
我创建了一个Java程序来比较两个字符串:String s1 = "Hello";String s2 = "hello";if (s1.equals(s2)) {    System.out.println("hai");} else {    System.out.println("welcome");}它显示“欢迎”。我了解它区分大小写。但是我的问题是我想比较两个不区分大小写的字符串。即我希望输出是hai。
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

最好是使用s1.equalsIgnoreCase(s2):(请参阅javadoc)

您也可以将它们都转换为大写/小写并使用 s1.equals(s2)


查看完整回答
反对 回复 2019-11-28
?
拉莫斯之舞

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 = "flu\u0308ßchen";

    String BROOK = "FLÜSSCHEN";


    assert equalsIgnoreCase(brook, BROOK);

即使对这种简单测试String.equalsIgnoreCase,用,或String.equals对大写或小写字符串的幼稚比较也会失败。


(请注意,尽管预定义的案例折叠样式getNFKCCasefoldInstance是与语言环境无关的;对于土耳其语语言环境,UCharacter.foldCase可能需要进行更多工作。)


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 731 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信