Освоение String.compareTo() в Java: синтаксис, сценарии использования и примеры
Что такое compareTo() в Java?
compareTo() сравнивает две строки лексикографически. Каждый символ конвертируется в его Unicode-значение, метод возвращает int, указывающий относительный порядок. Если строки идентичны — возвращает 0; иначе результат отрицательный, если первая строка предшествует второй, или положительный — если следует за ней.
Метод определён в интерфейсе java.lang.Comparable.
Синтаксис
public int compareTo(String str)
Параметр: str — строка для сравнения с вызывающей строкой.
Возвращаемое значение: int — отрицательный, ноль или положительный в зависимости от лексикографического порядка.
< 0— вызывающая строка лексикографически первой.== 0— строки равны.> 0— аргумент-строка лексикографически первой.
Пример 1: Базовое использование
public class SampleString {
public static void main(String[] args) {
String str = "a";
System.out.println("Compare \"a\" to \"b\": " + str.compareTo("b"));
str = "b";
System.out.println("Compare \"b\" to \"a\": " + str.compareTo("a"));
str = "b";
System.out.println("Compare \"b\" to \"b\": " + str.compareTo("b"));
}
}
Вывод
- Compare "a" to "b": -1
- Compare "b" to "a": 1
- Compare "b" to "b": 0
Пояснение:
- «a» идёт перед «b» по алфавиту — результат отрицательный.
- «b» после «a» — положительный.
- Идентичные строки — ноль.
Пример 2: Чувствительность к регистру vs нечувствительность
public class SampleString {
public static void main(String[] args) {
String str = "RockStar";
System.out.println("Case-sensitive compare to \"rockstar\": " + str.compareTo("rockstar"));
System.out.println("Case-insensitive compare to \"ROCKSTAR\": " + str.compareToIgnoreCase("ROCKSTAR"));
}
}
Вывод
- Case-sensitive compare to "rockstar": -32
- Case-insensitive compare to "ROCKSTAR": 0
Когда использовать compareTo()
Используйте compareTo() когда нужен естественный (лексикографический) порядок строк, напр. сортировка списка имён или словарный поиск. Метод следует тем же правилам, что String.compareToIgnoreCase(), но учитывает регистр.
Типичные сценарии:
- Сортировка коллекций
StringчерезCollections.sort(). - Реализация
Comparableв пользовательских классах, требующих сравнение строк. - Бинарный поиск в отсортированных массивах строк.
Пример 3: Практическое сравнение
public class CompareDemo {
public static void main(String[] args) {
String s1 = "Guru1";
String s2 = "Guru2";
System.out.println("String 1: " + s1);
System.out.println("String 2: " + s2);
int result = s1.compareTo(s2);
if (result < 0) {
System.out.println("\"" + s1 + "\" is lexicographically higher than \"" + s2 + "\"");
} else if (result == 0) {
System.out.println("\"" + s1 + "\" is lexicographically equal to \"" + s2 + "\"");
} else {
System.out.println("\"" + s1 + "\" is lexicographically less than \"" + s2 + "\"");
}
}
}
Вывод
- String 1: Guru1
- String 2: Guru2
- "Guru1" is lexicographically higher than "Guru2"
java
- Метод String.length() в Java: как получить длину строки (пример)
- Освоение String.indexOf() в Java: поиск подстрок и практические примеры
- Понимание String.charAt() в Java: синтаксис, возвращаемый тип, исключения и пример
- Метод String.contains() в Java: как проверить наличие подстроки — примеры
- Освоение String.endsWith() в Java: проверка суффиксов строки с примерами
- Замена строк в Java: replace(), replaceAll() и replaceFirst() подробно
- Чтение файлов в Java с BufferedReader — Практическое руководство с примерами
- Конвертация char в String в Java — практические примеры и лучшие практики
- Реверс строки в Java с использованием рекурсии — пошаговое руководство
- Функция print() в Python: практическое руководство с примерами