Java:为什么 String.compareIgnoreCase() 同时使用 Character.toUpperCase() 和 Character.toLowerCase()?

标签 java

<分区>

String 类的compareToIgnoreCase 方法是使用下面代码片段(jdk1.8.0_45) 中的方法实现的。

我。为什么 Character.toUpperCase(char)Character.toLowerCase(char) 都用于比较?它们中的任何一个都不能满足比较的目的吗?

二。为什么 s1.toLowerCase().compare(s2.toLowerCase()) 不用于实现 compareToIgnoreCase? - 我知道可以用不同的方式实现相同的逻辑。但是,我仍然想知道是否有特定的理由选择其中一个。

    public int compare(String s1, String s2) {
        int n1 = s1.length();
        int n2 = s2.length();
        int min = Math.min(n1, n2);
        for (int i = 0; i < min; i++) {
            char c1 = s1.charAt(i);
            char c2 = s2.charAt(i);
            if (c1 != c2) {
                c1 = Character.toUpperCase(c1);
                c2 = Character.toUpperCase(c2);
                if (c1 != c2) {
                    c1 = Character.toLowerCase(c1);
                    c2 = Character.toLowerCase(c2);
                    if (c1 != c2) {
                        // No overflow because of numeric promotion
                        return c1 - c2;
                    }
                }
            }
        }
        return n1 - n2;
    }

最佳答案

这是一个使用土耳其语 i's 的示例:

System.out.println(Character.toUpperCase('i') == Character.toUpperCase('İ'));
System.out.println(Character.toLowerCase('i') == Character.toLowerCase('İ'));

第一行打印false;第二个 trueIdeone demo .

关于Java:为什么 String.compareIgnoreCase() 同时使用 Character.toUpperCase() 和 Character.toLowerCase()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084032/

相关文章:

java - 不同尺寸的 Swing 面板

java - 在项目中存储大文本的最佳方法

java - Oracle OJDBC 驱动程序抛出 NoClassDefFoundError : oracle/i18n/util/LocaleMapper

java - 从 Solr 5.0 获取所有可能的数据

c# - 让类实现不同接口(interface)以限制客户端操作时的设计问题

java - 在 Mac OS 下打开新窗口作为选项卡时 Java/Swing 错误的任何解决方法

java - Spring 启动+ hibernate : Duplicate entry Exception while save entity

Java VowelAnalyst 问题

java - 无法在 Eclipse 上使用 Java 打开具有给定 URL 的 Firefox 浏览器

Java:隐式类型转换,或隐式 toString() 调用