当前位置: 首页 > 知识库问答 >
问题:

一串equalsIgnoreCase-大写v.小写

史磊
2023-03-14

我在浏览openjdk时,注意到字符串中有一个奇怪的代码路径。equalsIgnoreCase,特别是方法区域匹配:

if (ignoreCase) {
    // If characters don't match but case may be ignored,
    // try converting both characters to uppercase.
    // If the results match, then the comparison scan should
    // continue.
    char u1 = Character.toUpperCase(c1);
    char u2 = Character.toUpperCase(c2);
    if (u1 == u2) {
        continue;
    }
    // Unfortunately, conversion to uppercase does not work properly
    // for the Georgian alphabet, which has strange rules about case
    // conversion.  So we need to make one last check before
    // exiting.
    if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {
        continue;
    }
}

我理解关于调整特定字母表以检查小写是否相等的评论,但我想知道为什么还要检查大写?为什么不全部小写?

共有1个答案

华涵意
2023-03-14

现在问题重新开始了,我把答案转移到这里。

对于“如果匹配的大小写比大写多,为什么他们不只比较小写而不同时比较大写和小写?”它不匹配更多的字符对,只匹配不同的字符对。

仅比较大写是不够的,例如ASCII字母“I”和带有点 "İ" (<代码>(char)304的大写I,用于土耳其字母)有不同的大写(它们已经是大写),但它们有相同的小写字母“i”。(请注意,土耳其语认为带点的i和不带点的i是不同的字母,而不仅仅是重音字母,类似于德语的Umlauts ä/ö/ü 对a/o/u。)

仅比较小写是不够的,例如ASCII字母“i”和小无点 "ı" (<>(char)305)。它们有不同的小写(它们已经是小写),但它们有相同的大写字母“I”。

最后,比较大写I和圆点“İ”以及小写无圆点I“ı”。它们的大写字母(“İ”vs.“I”)和小写字母(“I”vs.“ı”)都不匹配,但大写字母的小写字母是相同的(“I”)。我发现了另一个例子,如果这种现象,在希腊字母“ϴ”和“ϑ”(char 1012和977)中。

所以一个真正的大小写不敏感比较甚至不能检查原始字符的大小写,而是必须检查大写的小写。

 类似资料:
  • 问题内容: 引起我注意的是,有几种方法可以比较Java中的字符串。 我只是很早以前就习惯了,以避免使用区分大小写的字符串出现问题。 另一方面,其他人则喜欢以大写或小写形式传递所有内容。 从我的立场(即使从技术上来说我坐在那里),我看不出真正的区别。 有人知道一种实践是否比另一种更好吗?如果是这样,为什么呢? 问题答案: 使用它是因为它比比较之前将两个String都转换为大写字母更具可读性。 可读性

  • 需要制作一个密码程序,用户在开始时设置密码,在程序停止前可以输入密码3次。该程序不能区分大小写。 程序按预期打印,但不区分大小写

  • 问题内容: 我遇到的问题是我无法让我的密码验证程序来检查字符串,以确保其中的一个字符为大写字母,而一个字符为小写字母,它将检查整个字符串中是否存在一个字符。其他,并根据要检查的语句打印错误消息。 我已经查看了该站点和Internet上的答案,但是找不到。这是功课。 下面是我当前的代码。 问题答案: 要确定字符串是否包含大写和小写字符,可以使用以下命令: 这使您可以检查: 本质上,这通过检查Stri

  • 本文向大家介绍写一个把字符串大小写切换的方法相关面试题,主要包含被问及写一个把字符串大小写切换的方法时的应答技巧和注意事项,需要的朋友参考一下 var reversal = function(str){ var newStr = ''; if(Object.prototype.toString.call(str).slice(8,-1) !== 'String'){ alert("请填写字符串")

  • Python 中,为了方便对字符串中的字母进行大小写转换,字符串变量提供了 3 种方法,分别是 title()、lower() 和 upper()。 Python title()方法 title() 方法用于将字符串中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后,此方法会返回转换得到的字符串。如果字符串中没有需要被转换的字符,此方法会将字符串原封不动地返回。 title() 方法的语

  • String 类的 toLowerCase() 方法可以将字符串中的所有字符全部转换成小写,而非字母的字符不受影响。语法格式如下: toUpperCase() 则将字符串中的所有字符全部转换成大写,而非字母的字符不受影响。语法格式如下: 例如: 例 1 下面的实例代码演示了如何对字符串应用大写和小写转换。 代码比较简单,运行后的输出结果如下: