Jak porównać dwa ciągi w Java

Metody porównywania ciągów znaków w Java

Java udostępnia różne metody, które można wykorzystać do porównania dwóch ciągów znaków Java. Porównanie ciągów w Java to funkcja dopasowująca sekwencję znaków do ciągu znaków.

Aby dowiedzieć się, jak porównywać ciągi znaków w Java, możesz użyć metod udostępnianych przez następujące klasy.

  • Klasa string z Javapakiet .lang.
  • Klasa obiektów z Javapakiet .util.
  • Klasa StringUtils z pakietu org.apache.commons.lang3.

Większość z nich Java Metody porównania ciągów mają rozwiązania umożliwiające ignorowanie wielkości liter. W tym Java W tym samouczku poznasz różne metody porównywania dwóch ciągów znaków.

Metoda 1: Metoda String równa się().

Kurs Java sznur metoda równa(). porównuje dwa obiekty typu string pod kątem równych wartości stringów.

Składnia:

public boolean equals(Object anObject)

Parametry metody równa się():

anObject – ciąg argumentów służący do porównywania ciągów.

Metoda Equals() zwraca typy

  • Zwraca wartość true, jeśli podany literał ciągu jest taki sam jak pierwszy ciąg.
  • Zwraca wartość false, jeśli pierwszy ciąg znaków nie jest taki sam jak ciąg argumentu.

Przykład:

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));
  }
}

Oczekiwany wynik:

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

Wyjaśnienie:

  • Na ostatnim wyjściu otrzymałeś wartość false, ponieważ określony obiekt ma inną wielkość liter.

Note: Użyj metody string równa się do porównania ciągów z uwzględnieniem wielkości liter. Użyj metody „equalsIgnoreCase”, aby porównać obiekty łańcuchowe o różnych wartościach ciągów.

Metoda 2: Metoda obiektów równa się ().

Kurs Java Obiekty równają się() Metoda porównuje dwa obiekty typu string, aby sprawdzić czy mają takie same wartości.

Składnia:

public static boolean equals(Object a, Object b)

parametry metody równa się().

a – Ciąg argumentowy dla pierwszego obiektu typu string.

b – Ciąg argumentowy dla drugiego obiektu typu string.

Metoda Equals() zwraca typy

  • Zwraca wartość true, jeśli literały ciągu są równe. Przekazanie wartości null w obu argumentach również zwróci wartość true.
  • Zwraca wartość false, jeśli literały ciągu nie są równe.

Przykład:

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));
    }
}

Wyjście:

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

Wyjaśnienie:

Z tego przykładu widać, że wynikiem jest wartość logiczna true, ponieważ porównywane ciągi są równe.

Metoda 3: Metoda string CompareTo().

Kurs Java Łańcuch porównawczy() Metoda porównuje dwa ciągi znaków w kolejności alfabetycznej. Zwykle nazywa się to porządkiem leksykograficznym.

Składnia:

public int compareTo(String str)

parametry metody CompareTo().

str – Ciąg do porównania z bieżącym ciągiem.

Metoda CompareTo() zwraca

  • 0 – Zwraca zero, jeśli określony obiekt jest równy bieżącemu ciągowi znaków.
  • < 0 – Zwraca liczbę mniejszą od zera, jeśli ten ciąg jest mniejszy niż określony obiekt.
  • > 0 – Zwraca liczbę większą od zera, jeśli ten ciąg znaków przekracza podany ciąg.

Przykład:

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));
    }
}

Oczekiwany wynik:

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

Wyjaśnienie:

Pierwszy wynik zwraca wartość zero, ponieważ pierwszy i drugi ciąg znaków są równe.

Drugi wynik zwraca wartość trzydzieści dwa, ponieważ znaki są różne.

Uwaga: Aby zignorować przypadki, możesz użyć metody „compareToIgnoreCase”.

Metoda 4: Metoda StringUtils równa się().

Kurs Java StringUtils równa się() Metoda ta porównuje równość dwóch sekwencji znaków.

Upewnij się, że do swojego programu dodałeś bibliotekę „org.apache.commons.lang3”. Umożliwi to porównywanie ciągów za pomocą metod StringUtil.

W przypadku projektów Maven użyj tego aby dodać bibliotekę do projektu.

Jeśli jednak chcesz dodać bibliotekę bez żadnych narzędzi do kompilacji, użyj tego .

Składnia:

public static boolean equals(CharSequnce cs1, CharSequence cs2)

Parametry metody StringUtils równa się().

  • cs1 – Ciąg znaków pierwszego argumentu.
  • cs2 – Ciąg znaków dla drugiego argumentu.

Metoda StringUtils równa się() zwraca

  • Zwraca wartość true, jeśli porównanie ciągów jest równe. Ma to zastosowanie, jeśli w dwóch argumentach przekażesz wartość null.
  • Zwraca wartość false, jeśli porównanie ciągów nie jest równe.

Przykład:

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));
    }
}

Wyjście:

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

Wyjaśnienie:

Ponieważ zawartość pierwszego i drugiego ciągu jest równa, wynik zwraca wartość true.

Aby zignorować wielkość liter, możesz użyć metody „equalsIgnoreCase”.

Metoda 5: Metoda StringUtils równa sięAny().

Kurs Java StringUtils równa sięAny() Metoda sprawdza, czy w argumentach istnieje ciąg znaków.

Składnia:

public static boolean equalsAny(CharSequence string, Charsequence… searchStrings)

Parametry metody StringUtils równają sięAny().

  • string – Wartość ciągu pierwszego argumentu. Argument może mieć również wartość null.
  • searchStrings – Zestaw argumentów w postaci ciągu znaków dla metody sprawdzającej, czy obecny jest pierwszy ciąg argumentu.

Metoda StringUtils równa sięAny() zwraca

  • Zwraca wartość true, jeśli pasujący ciąg istnieje w zmiennej liczbie wyszukiwanych ciągów. Ma to zastosowanie, jeśli oba argumenty są zerowe.
  • Zwraca wartość false, jeśli pasujący ciąg nie pasuje do żadnego ciągu ze zmiennej liczba wyszukiwanych ciągów.

Przykład:

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));
    }
}

Wyjście:

is Guru99 available: true
is GURU99 available: false

Wyjaśnienie:

Ponieważ zawartość pierwszego i drugiego ciągu jest równa, wynik zwraca wartość true. Aby zignorować wielkość liter, możesz użyć metody „equalsAnyIgnoreCase”.

Metoda 6: Użycie operatora ==

Operator == w przypadku ciągów znaków sprawdza, czy odwołania do obiektów mają ten sam adres.

Przykład:

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));
    }
}

Oczekiwany wynik:

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

Wyjaśnienie:

  • Pierwszy wynik zwraca wartość logiczną true. Ciągi o tej samej zawartości są dodawane do tej samej puli ciągów, dlatego ciąg ma ten sam adres.
  • Drugi wynik zwraca wartość logiczną false. Obiekty mają różną zawartość, co skutkuje innymi pulami ciągów. Oznacza to, że ciągi znaków mają oddzielne odniesienia do obiektów; zatem wynik jest fałszywy.

Metoda 7: Tworzenie niestandardowej metody porównywania dwóch ciągów Java

Utwórz metodę porównującą dwa ciągi znaków, używając kolejności leksykograficznej.

Składnia:

public static int compareTwoStrings(String str1, String str2)

Niestandardowe parametry metody

  • str1 – Ciąg do porównania.
  • str2 – Ciąg znaków do porównania.

Zwraca metodę niestandardową

  • 0 – Zwraca zero, jeśli pierwszy ciąg jest równy drugiemu ciągowi.
  • < 0 – Zwraca liczbę mniejszą od zera, jeśli pierwszy ciąg jest mniejszy niż drugi ciąg.
  • > 0 – Zwraca liczbę większą od zera, jeżeli pierwszy ciąg znaków jest większy od drugiego.

Przykład:

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));
    }
}

Oczekiwany wynik:

is Guru99 equal to Guru99: 0

Wyjaśnienie:

Wynik zwrócił wartość zero, co oznacza, że ​​funkcja niestandardowa działa zgodnie z oczekiwaniami.

Podsumowanie:

Kurs Java Wybór metody porównywania dwóch ciągów znaków zależy od następujących czynników.

  • Chęć posiadania kontroli nad swoją metodą. W takim przypadku utwórz metodę niestandardową.
  • Nie możesz używać starszego kodu. z Java 6 i niżej.
  • Metoda o optymalnej wydajności.
  • Typ danych, z którymi pracujesz. Na przykład dopasowanie ciągu znaków ze zbioru zmiennych argumentów.
  • Funkcje udostępniane przez bibliotekę zewnętrzną. Na przykład biblioteka StringUtils udostępnia różne metody porównywania ciągów.