Методы 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;
}
Он поэлементно сравнивает символы от первого и до конца наиболее короткой строки. Если находится пара отличающихся символов, то возвращается результат сравнения первой такой пары. Если все символы совпадают, то возвращается результат сравнения длин строк.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости