Как сравнить две строки в Java

⚡ Умное резюме

Сравнение двух строк в Java Это можно сделать с помощью нескольких методов, которые сопоставляют последовательность символов на равенство или порядок. В этом ресурсе описаны семь подходов, включая методы String equals, Objects equals, compareTo, методы StringUtils, оператор == и пользовательский метод сравнения, каждый с примерами.

  • 🟰 String equals(): Сравнивает два строковых значения с учетом регистра, возвращая true или false.
  • 📦 Функция `equals()` для объектов: Безопасное сравнение двух строк, рассматривающее два нулевых значения как равные.
  • 🔤 compareTo(): Сравнивает строки в лексикографическом порядке, возвращая ноль, отрицательное или положительное число.
  • 🧰 Методы класса StringUtils: Функции equals() и equalsAny() из библиотеки Apache Commons сравнивают строки и корректно обрабатывают значения null.
  • ⚠️ == Operaтор: Сравнивает ссылки на объекты, а не их содержимое, поэтому его не следует использовать для сравнения значений.

Как сравнить две строки в Java

Методы сравнения строк в Java

Java предоставляет различные методы, которые вы можете использовать для сравнения двух строк в Java. Сравнение строк в Java — это функция, которая сопоставляет последовательность символов со строкой.

Чтобы научиться сравнивать строки в JavaВы можете использовать методы, предоставляемые следующими классами:

  • Класс String из пакета java.lang.
  • Класс Objects из пакета java.util.
  • Класс StringUtils из пакета org.apache.commons.lang3.

Большинство из них Java Методы сравнения строк позволяют игнорировать регистр. В этом руководстве вы узнаете о различных методах, которые можно использовать для сравнения двух строк.

Метод 1: метод String Equals()

Java строка equals () метод сравнивает два строковых объекта на предмет равных строковых значений.

Синтаксис:

public boolean equals(Object anObject)

Параметры методаquals():

anObject – строка аргумента для сравнения строк.

Типы возвращаемых методом методаquals()

  • Возвращает true, если предоставленный строковый литерал совпадает с первой строкой.
  • Возвращает false, если первая строка не совпадает со строкой аргумента.

Пример:

public class CompareTwoStrings {
 public static void main(String[] args) {
   String stringOne = "Guru99";
   String stringTwo = "Guru99";
   System.out.println("is Guru99 equal to Guru99: "+stringOne.equals(stringTwo));
   String stringThree = "GURU99";
   System.out.println("is Guru99 equal to GURU99: "+stringOne.equals(stringThree));
  }
}

Ожидаемый результат:

is Guru99 equal to Guru99: true
is Guru99 equal to GURU99: false

Объяснение:

  • В последнем выводе вы получили false, потому что указанный объект имеет другой регистр.

Примечание: Для сравнения строк с учетом регистра используйте метод `equals()`. Для сравнения строковых объектов без учета регистра используйте метод `equalsIgnoreCase`.

Метод 2: метод Objectsquals()

Java Объекты равны() Метод сравнивает два строковых объекта, чтобы определить, имеют ли они одинаковые значения.

Синтаксис:

public static boolean equals(Object a, Object b)

Параметры методаquals()

a – строка аргумента для первого строкового объекта.

b – строка аргумента для второго строкового объекта.

Типы возвращаемых методом методаquals()

  • Возвращает true, если строковые литералы равны. Передача нулевого значения в двух аргументах также вернет true.
  • Возвращает false, если строковые литералы не равны.

Пример:

import java.util.Objects;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringOne, stringTwo));
        String stringThree = null;
        String stringFour = null;
        System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringThree, stringFour));
    }
}

Выход:

is Guru99 equal to Guru99: true
is Guru99 equal to Guru99: true

Объяснение:

Из этого примера видно, что на выходе получается логическое значение true, поскольку сравниваемые строки равны.

Метод 3: метод сравнения строк()

Java Строка сравненияTo() метод сравнивает две строки в алфавитном порядке. Обычно его называют лексикографическим порядком.

Синтаксис:

public int compareTo(String str)

Параметры метода CompareTo()

str – строка для сравнения с текущей строкой.

Метод CompareTo() возвращает

  • 0 — возвращает ноль, если указанный объект равен текущей строке.
  • < 0 — возвращает число меньше нуля, если эта строка меньше указанного объекта.
  • > 0 — возвращает число больше нуля, если эта строка превышает предоставленную строку.

Пример:

public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + stringOne.compareTo(stringTwo));
        String stringThree = "GURU99";
		// u = 117, U = 85, result = 117-85 = 32
        System.out.println("is Guru99 equal to GURU99: " + stringOne.compareTo(stringThree));
    }
}

Ожидаемый результат:

is Guru99 equal to Guru99: 0
is Guru99 equal to GURU99: 32

Объяснение:

Первый результат возвращает значение ноль, поскольку первая и вторая строки равны.

Второй результат возвращает значение тридцать два, поскольку символы отличаются.

Примечание: Чтобы игнорировать регистр, можно использовать метод «compareToIgnoreCase».

Метод 4: метод StringUtils равно()

Java StringUtils равно() метод сравнивает равенство двух последовательностей символов.

Убедитесь, что вы добавили библиотеку “org.apache.commons.lang3” в свою программу. Это позволит вам сравнивать строки с помощью методов StringUtils.

Для проектов Maven используйте это инструкция чтобы добавить библиотеку в проект.

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

Синтаксис:

public static boolean equals(CharSequence cs1, CharSequence cs2)

Параметры метода StringUtils равенства()

  • cs1 — последовательность символов для первого аргумента.
  • cs2 — последовательность символов для второго аргумента.

Метод StringUtils Equals() возвращает результат.

  • Возвращает true, если сравниваемые строки равны. Это также относится к случаю, когда в обоих аргументах передается значение null.
  • Возвращает false, если сравнение строк не равно.

Пример:

import org.apache.commons.lang3.StringUtils;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + StringUtils.equals(stringOne, stringTwo));
        String stringThree = "GURU99";
        System.out.println("is Guru99 equal to GURU99: " + StringUtils.equals(stringOne, stringThree));
    }
}

Выход:

is Guru99 equal to Guru99: true
is Guru99 equal to GURU99: false

Объяснение:

Поскольку содержимое первой и второй строк одинаково, результат возвращает true.

Вы можете использовать метод «equalsIgnoreCase», чтобы игнорировать регистр.

Метод 5: метод StringUtils равноAny()

Java StringUtils равноAny() метод проверяет, существует ли строка в аргументах.

Синтаксис:

public static boolean equalsAny(CharSequence string, CharSequence... searchStrings)

Параметры метода StringUtils =Any()

  • строка – строковое значение для первого аргумента. Аргумент также может иметь нулевое значение.
  • searchStrings — набор строковых аргументов, позволяющий методу определить, присутствует ли первая строка аргумента.

Метод StringUtils EqualsAny() возвращает результат.

  • Возвращает true, если искомая строка существует среди заданного количества строк поиска. Это относится и к случаю, когда оба аргумента равны null.
  • Возвращает значение false, если сопоставляемая строка не соответствует ни одной строке из переменного количества строк поиска.

Пример:

import org.apache.commons.lang3.StringUtils;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String[] stringTwo = new String[] {
            "Guru99",
            "JavaGuru99"
        };
        System.out.println("is Guru99 available: " +
            StringUtils.equalsAny(stringOne, stringTwo));
        String[] stringThree = new String[] {
            "GURU99",
            "JavaGuru99"
        };
        System.out.println("is GURU99 available: " +
            StringUtils.equalsAny(stringOne, stringThree));
    }
}

Выход:

is Guru99 available: true
is GURU99 available: false

Объяснение:

Поскольку содержимое первой и второй строк одинаково, результат возвращает true. Вы можете использовать метод «equalsAnyIgnoreCase», чтобы игнорировать регистр.

Способ 6: использование оператора ==

Оператор == в строках проверяет, имеют ли ссылки на объекты одинаковый адрес.

Пример:

public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 == to Guru99: " + (stringOne == stringTwo));
        String stringThree = "GURU99";
        System.out.println("is Guru99 == to GURU99: " + (stringOne == stringThree));
    }
}

Ожидаемый результат:

is Guru99 == to Guru99: true
is Guru99 == to GURU99: false

Объяснение:

  • Первый результат возвращает логическое значение true. Строки с одинаковым содержимым добавляются в один и тот же пул строк, поэтому строки используют один и тот же адрес.
  • Второй результат возвращает логическое значение false. Объекты имеют различное содержимое, что приводит к использованию разных пулов строк. Это означает, что строки имеют отдельные ссылки на объекты; следовательно, результат равен false.

Способ 7. Создание собственного метода для сравнения двух строк Java

Создайте метод, который сравнивает две строки, используя лексикографический порядок.

Синтаксис:

public static int compareTwoStrings(String str1, String str2)

Параметры пользовательского метода

  • str1 – строка для сравнения.
  • str2 – строка для сравнения.

Возврат пользовательского метода

  • 0 — возвращает ноль, если первая строка равна второй строке.
  • < 0 — возвращает число меньше нуля, если первая строка меньше второй строки.
  • > 0 — возвращает число больше нуля, если первая строка больше второй строки.

Пример:

public class CompareTwoStrings {
    public static int compareTwoStrings(String stringOne, String stringTwo) {
        int lengthOfStringOne = stringOne.length();
        int lengthOfStringTwo = stringTwo.length();
        int minStringLength = Math.min(lengthOfStringOne, lengthOfStringTwo);
        for (int i = 0; i < minStringLength; i++) {
            char stringOneCharValue = stringOne.charAt(i);
            char stringTwoCharValue = stringTwo.charAt(i);
            if (stringOneCharValue != stringTwoCharValue) {
                return stringOneCharValue - stringTwoCharValue;
            }
        }
        if (lengthOfStringOne != lengthOfStringTwo) {
            return lengthOfStringOne - lengthOfStringTwo;
        } else {
            return 0;
        }
    }
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + compareTwoStrings(stringOne, stringTwo));
    }
}

Ожидаемый результат:

is Guru99 equal to Guru99: 0

Объяснение:

Результат вернул нулевое значение, что означает, что пользовательская функция работает должным образом.

Часто задаваемые вопросы (FAQ)

Да. Искусственный интеллект может рекомендовать операторы equals, compareTo или StringUtils в зависимости от вашей цели и указывать на распространенную ошибку, связанную с оператором ==. Тем не менее, вам следует подтвердить свой выбор с помощью тестов для ваших конкретных данных.

Да. Инструменты искусственного интеллекта обнаруживают неправильное использование оператора == для сравнения содержимого и предлагают вместо него использовать equals или equalsIgnoreCase. Это помогает уменьшить количество неочевидных ошибок сравнения на равенство, которые часто встречаются у начинающих пользователей, работающих со строками.

Оператор `==` сравнивает ссылки на объекты, а не их содержимое. Две строки с одинаковым значением могут иметь разные ссылки, поэтому `==` может возвращать `false`. Для надежного сравнения значений используйте функцию `equals()`.

Метод equals() чувствителен к регистру, поэтому «Guru"99" и "GURU99" не равны. Метод equalsIgnoreCase() сравнивает строки, игнорируя различия в верхнем и нижнем регистре, и возвращает true для обоих случаев.

Подведем итог этой публикации следующим образом: