Як порівняти два рядки в Java

⚡ Розумний підсумок

Порівняння двох рядків у Java можна виконати за допомогою кількох методів, які зіставляють послідовність символів для визначення рівності або порядку. У цьому ресурсі пояснюється сім підходів, включаючи методи String equals, Objects equals, compareTo, StringUtils, оператор == та користувацький метод порівняння, кожен з прикладами.

  • 🟰 Рядок дорівнює(): Порівнює два рядкові значення на предмет рівності з урахуванням регістру, повертаючи значення true або false.
  • 📦 Об'єкти дорівнюють(): Безпечно порівнює два рядки, розглядаючи два значення null як рівні.
  • 🔤 порівняти з(): Порівнює рядки в лексикографічному порядку, повертаючи нуль, від'ємне або додатне число.
  • 🧰 Методи StringUtils: equals() та equalsAny() з Apache Commons порівнюють рядки та коректно обробляють нулі.
  • ⚠️ == 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)

Параметри методу equals():

anObject – Рядок аргументу для порівняння рядків.

типи повернення методу equals().

  • Повертає 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 в останньому виведенні, оскільки вказаний об’єкт має інший регістр.

Примітка: Використовуйте метод string equals() для порівняння рядків з урахуванням регістру. Використовуйте метод “equalsIgnoreCase” для порівняння рядкових об’єктів з ігноруванням регістру.

Спосіб 2: Метод Objects equals().

Команда Java Об'єкти дорівнюють() метод порівнює два рядкові об’єкти, щоб визначити, чи мають вони однакові значення.

Синтаксис:

public static boolean equals(Object a, Object b)

параметри методу equals().

a – рядок аргументів для першого рядкового об’єкта.

b – Рядок аргументів для другого рядкового об’єкта.

типи повернення методу equals().

  • Повертає 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: метод String compareTo().

Команда Java Рядок compareTo() метод порівнює два рядки в алфавітному порядку. Його зазвичай називають лексикографічним порядком.

Синтаксис:

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 equals().

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

Переконайтеся, що ви додали бібліотеку «org.apache.commons.lang3» до своєї програми. Це дозволить вам порівнювати рядки за допомогою методів StringUtils.

Для проектів Maven використовуйте це керівництво щоб додати бібліотеку до проекту.

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

Синтаксис:

public static boolean equals(CharSequence cs1, CharSequence cs2)

Параметри методу StringUtils equals().

  • 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 equalsAny().

Команда Java StringUtils дорівнює будь-якому() метод перевіряє, чи існує рядок в аргументах.

Синтаксис:

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

Параметри методу StringUtils equalsAny().

  • рядок – рядкове значення для першого аргументу. Аргумент також може мати нульове значення.
  • 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

Пояснення:

Результат повернув нульове значення, що означає, що спеціальна функція працює належним чином.

Поширені запитання

Так. Помічники ШІ можуть рекомендувати equals, compareTo або StringUtils на основі вашої мети та позначати поширену помилку ==. Вам все одно слід підтвердити вибір за допомогою тестів для ваших конкретних даних.

Так. Інструменти штучного інтелекту виявляють неправильне використання == для порівняння контенту та пропонують замість цього equals або equalsIgnoreCase. Це допомагає зменшити незначні помилки рівності, які є типовими для початківців, які працюють з рядками.

Оператор == порівнює посилання на об'єкти, а не їх вміст. Два рядки з однаковим значенням можуть мати різні посилання, тому == може повернути значення false. Використовуйте equals() для надійного порівняння значень.

Метод equals() чутливий до регістру, тому «Guru«99» та «GURU99» не рівні. Метод equalsIgnoreCase() порівнює рядки, ігноруючи відмінності між верхніми та нижніми літерами, повертаючи true для обох.

Підсумуйте цей пост за допомогою: