java - 如何手动按字典顺序比较 "abcd"& ""abcde"有效

标签 java compareto lexicographic

我想写我自己的 compareTo 方法,所以我写了这段简单的代码:

public int myCompare(String a, String b) {
    int min = Math.min(a.length(), b.length());

    for (int i=0; i < min; i++) {
        int diff = a.charAt(i) - b.charAt(i);
        if (diff == 0) {
            continue;
        } else {
            return diff;
        }
    }
    // meaning both strings are equals so far
    if (a.length() == b.length()) {
        return 0;
    } else if (a.length() > b.length()) {
        return -1;
    } else {
        return 1;
    }
}

好吧,这段代码工作正常,但我讨厌最后的 if/else 语句 - 你对如何改进这段代码有什么建议吗?

最佳答案

这取决于你想自己写多少。你可以使用

return a.length() - b.length(); // as length is non-negative

return Integer.compareTo(a.length(), b.length());

在你的第一个循环中你也可以写

for (int i = 0; i < a.length() && i < b.length(); i++) {
    int diff = a.charAt(i) - b.charAt(i);
    if (diff != 0)
        return diff;
}

关于java - 如何手动按字典顺序比较 "abcd"& ""abcde"有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38322857/

相关文章:

java - 设置类路径后包 org.apache.hadoop.conf 不存在

java - 如何让 Runtime.exec() "take over"调用控制台的应用程序直到完成?

java - 自动检查equals、hashCode和compareTo一致性的技术?

python - 使用 heapq 进行反向字典顺序

java - 对于一个测试用例,按字典顺序比较字符串的新方法失败

java - 我可以使用 Quartz Scheduler 在第 30 天每隔一个月触发一次,但如果月份没有第 30 天,则在最后一天触发?

java - 将来自不同 Activity 的值添加到 ArrayList

java - 您如何比较类别的顺序?

java - 不能转换为 [Ljava.lang.Comparable

sorting - 使用 Haskell 按字典顺序获取排列