Java 如何手动按词典进行比较;abcd"&&引用&引用;abcde“;有效地

Java 如何手动按词典进行比较;abcd"&&引用&引用;abcde“;有效地,java,compareto,lexicographic,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) { conti

我想编写自己的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;
    }
}
public int myCompare(字符串a、字符串b){
int min=Math.min(a.length(),b.length());
对于(int i=0;ib.length()){
返回-1;
}否则{
返回1;
}
}

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

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

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

在第一个循环中,您还可以编写

for (int i = 0; i < a.length() && i < b.length(); i++) {
    int diff = a.charAt(i) - b.charAt(i);
    if (diff != 0)
        return diff;
}
for(int i=0;i
@AndyTurner是的,但是
char-char
是一个
int
byte-byte
byte%byte
:PYeah,在我写了它之后意识到了这一点。我仍然更喜欢
WrappedPrimitive。请注意,比较
方法。@我经常想知道为什么程序员如此害怕基础数学,以至于更复杂的表达式更吸引人。我反复强调的原因是为了避免减法溢出的问题。我猜“短于
int
”类型没有问题;但我想我刚刚印上了“使用比较”的图案。我想这是另一件需要忘记的事情。@Andy Turner当你是初学者时,你打破了所有的规则,因为你不知道它们是什么,当你成为高级开发人员时,你必须学习规则,当你成为专家时,你知道打破规则是有意义的,你应该知道,有些人会认为这违反了一条规则,这是一个很好的时间来评论为什么这样做。
for (int i = 0; i < a.length() && i < b.length(); i++) {
    int diff = a.charAt(i) - b.charAt(i);
    if (diff != 0)
        return diff;
}