Методы compareTo()
и compareToIgnoreCase()
позволяют сравнивать строки, но они позволяют вычислить насколько одна строка больше другой. Как я понял.
String a = "A";
String b = "z";
System.out.println(a.compareToIgnoreCase(b));
System.out.println(a.compareTo(b));
Вот что вывел:
//-25
//-57
Не пойму в подробностях как этот методы работают, кто может рассказать?
Каждый символ строки конвертируются в юникод. Если строки равны - возвращается 0, если та строка, которую ты сравниваешь с другой, лексикографически больше, то возвращается положительное число, если меньше - отрицательное
Суть работы любого компаратора - вернуть целочисленный результат сравнения объектов.
Зажав клавишу 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;
}
Он поэлементно сравнивает символы от первого и до конца наиболее короткой строки. Если находится пара отличающихся символов, то возвращается результат сравнения первой такой пары. Если все символы совпадают, то возвращается результат сравнения длин строк.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Имеется следующая проблема: при возврате из одной активности в другую, мне необходимо, чтобы открывался определенный пункт меню главной...
Как преобразовать массив битов в текстовый вид так, чтобы это выглядело как набор из 0 и 1?
выводит все время ноль - в чем причина