Функция CompareTo () в Java - PullRequest
       54

Функция CompareTo () в Java

2 голосов
/ 18 февраля 2020

Я написал код ниже

import java.util.*;
class compare{
    public static void main(String []args){
        String s1="java";
        String s2="javaProgramming";
        System.out.println(s1.compareTo(s2));
    }
}

Выход для этого кода -11. Поскольку нет символа для завершения строки в java, какой символ в "java" сравнивается с "P" в "javaProgramming"?

Ответы [ 3 ]

4 голосов
/ 18 февраля 2020

Давайте посмотрим, что javadocs говорит об этом

Сравнивает две строки лексикографически. Сравнение основано на значении Unicode каждого символа в строках. Последовательность символов, представленная этим объектом String, сравнивается лексикографически с последовательностью символов, представленной строкой аргумента. Результатом является отрицательное целое число, если этот объект String лексикографически предшествует строке аргумента. Результатом является положительное целое число, если этот объект String лексикографически следует за строкой аргумента. Результат равен нулю, если строки равны; CompareTo возвращает 0 именно тогда, когда метод equals (Object) возвращает true.

Это определение лексикографического порядка c. Если две строки различны, то либо они имеют разные символы в некотором индексе, который является допустимым индексом для обеих строк, либо их длины различны, либо оба. Если они имеют разные символы в одной или нескольких позициях индекса, пусть k будет наименьшим таким индексом; затем строка, символ которой в позиции k имеет меньшее значение, как определено с помощью оператора <, лексикографически предшествует другой строке. В этом случае CompareTo возвращает разность двухсимвольных значений в позиции k в двух строках, то есть значение: </p>

 this.charAt(k)-anotherString.charAt(k)

Если нет позиции индекса, в которой они отличаются, то более короткая строка лексикографически предшествует более длинной строке. В этом случае compareTo возвращает разницу длин строк, то есть значение:

 this.length()-anotherString.length()
4 голосов
/ 18 февраля 2020

Символ 'P' не сравнивается ни с чем в первых String.

Он сравнивает только первые 4 символа из 2 строк, которые равны друг другу.

Затем возвращается длина первой строки минус длина второй строки.

public int compareTo(String anotherString) {
    int len1 = value.length;
    int len2 = anotherString.value.length;
    int lim = Math.min(len1, len2);
    char v1[] = value;
    char v2[] = anotherString.value;

    int k = 0;
    while (k < lim) {
        char c1 = v1[k];
        char c2 = v2[k];
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    return len1 - len2;
}

Поскольку вторая String длиннее, а первая String содержится во второй, возвращая любую подойдет отрицательное значение, поскольку более короткое значение String должно стоять на первом месте в лексикографическом порядке.

1 голос
/ 18 февраля 2020

Как видно из исходного кода , сравнение останавливается, когда достигается минимум длин каждой строки. Если все символы равны через эту точку, то возвращается разница в длине.

...