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