Класс String и его методы compareTo() и compareToIgnoreCase()

178
13 мая 2019, 18:50

Методы compareTo() и compareToIgnoreCase() позволяют сравнивать строки, но они позволяют вычислить насколько одна строка больше другой. Как я понял.

        String a = "A";
        String b = "z";
        System.out.println(a.compareToIgnoreCase(b));
        System.out.println(a.compareTo(b));

Вот что вывел:

//-25
//-57

Не пойму в подробностях как этот методы работают, кто может рассказать?

Answer 1

Каждый символ строки конвертируются в юникод. Если строки равны - возвращается 0, если та строка, которую ты сравниваешь с другой, лексикографически больше, то возвращается положительное число, если меньше - отрицательное

Answer 2

Суть работы любого компаратора - вернуть целочисленный результат сравнения объектов. Зажав клавишу Ctrl и щелкнув по методу в большинстве IDE можно перейти к реализации интересующего нас метода. Так работает компаратор строк:(строки уже приведены к виду массивов байтов byte[])

@HotSpotIntrinsicCandidate
public static int compareTo(byte[] value, byte[] other) {
    int len1 = value.length;
    int len2 = other.length;
    int lim = Math.min(len1, len2);
    for (int k = 0; k < lim; k++) {
        if (value[k] != other[k]) {
            return getChar(value, k) - getChar(other, k);
        }
    }
    return len1 - len2;
}

Он поэлементно сравнивает символы от первого и до конца наиболее короткой строки. Если находится пара отличающихся символов, то возвращается результат сравнения первой такой пары. Если все символы совпадают, то возвращается результат сравнения длин строк.

READ ALSO
Возврат в главную активность

Возврат в главную активность

Имеется следующая проблема: при возврате из одной активности в другую, мне необходимо, чтобы открывался определенный пункт меню главной...

140
byte array в string как &ldquo;0&rdquo; и &ldquo;1&rdquo;

byte array в string как “0” и “1”

Как преобразовать массив битов в текстовый вид так, чтобы это выглядело как набор из 0 и 1?

155
JAVA, maven, servlet [закрыт]

JAVA, maven, servlet [закрыт]

Зачем нужен maven, когда работаем с сервлетами?

170