Jak porovnat dva řetězce v Java

Metody pro porovnání řetězců v Java

Java poskytuje různé metody, které můžete využít k porovnání dvou řetězců Java. Porovnání řetězců v Java je funkce, která přiřazuje posloupnost znaků k řetězci.

Chcete-li se naučit porovnávat řetězce v Java, můžete použít metody poskytované následujícími třídami.

  • Řetězcová třída z Javabalíček .lang.
  • Třída objektů z Javabalíček .util.
  • Třída StringUtils z balíčku org.apache.commons.lang3.

Většina z nich Java metody porovnání řetězců mají řešení pro ignorování případu. V tomhle Java tutoriálu se naučíte různé metody, které můžete použít k porovnání dvou řetězců.

Metoda 1: Metoda String equals().

Jedno Java Řetězec metoda equals(). porovnává dva objekty řetězce pro stejné hodnoty řetězce.

Syntaxe:

public boolean equals(Object anObject)

parametry metody equals():

anObject – Řetězec argumentu pro porovnávání řetězců.

návratové typy metody equals().

  • Vrátí hodnotu true, pokud je zadaný řetězcový literál stejný jako první řetězec.
  • Vrátí false, pokud první řetězec není stejný jako řetězec argumentu.

Příklad:

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

Očekávaný výstup:

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

Vysvětlení:

  • V posledním výstupu jste dostali false, protože zadaný objekt má odlišná velká a malá písmena.

Hodnocení: Použijte metodu řetězec se rovná pro porovnání řetězců s rozlišováním velkých a malých písmen. Použijte metodu „equalsIgnoreCase“ k porovnání řetězcových objektů s různými řetězcovými hodnotami.

Metoda 2: Metoda Objects equals().

Jedno Java Objects equals() metoda porovná dva objekty řetězce, aby zjistila, zda mají stejné hodnoty.

Syntaxe:

public static boolean equals(Object a, Object b)

parametry metody equals().

a – Řetězec argumentu pro první objekt řetězce.

b – Řetězec argumentu pro druhý objekt řetězce.

návratové typy metody equals().

  • Vrátí hodnotu true, pokud jsou řetězcové literály stejné. Předání hodnoty null ve dvou argumentech také vrátí hodnotu true.
  • Vrátí false, pokud se řetězcové literály nerovnají.

Příklad:

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

Výstup:

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

Vysvětlení:

Z tohoto příkladu můžete vidět, že výstup je booleovská hodnota true, protože porovnávané řetězce jsou stejné.

Metoda 3: Metoda String CompareTo().

Jedno Java String CompareTo() metoda porovnává dva řetězce v abecedním pořadí. Obvykle se označuje jako lexikografický řád.

Syntaxe:

public int compareTo(String str)

parametry metody CompareTo().

str – Řetězec, který se má porovnat s aktuálním řetězcem.

metoda CompareTo() vrací

  • 0 – Vrátí nulu, pokud je zadaný objekt roven aktuálnímu řetězci.
  • < 0 – Vrátí číslo menší než nula, pokud je tento řetězec menší než zadaný objekt.
  • > 0 – Vrátí číslo větší než nula, pokud tento řetězec překročí zadaný řetězec.

Příklad:

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

Očekávaný výstup:

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

Vysvětlení:

První výsledek vrátí hodnotu nula, protože první a druhý řetězec jsou stejné.

Druhý výsledek vrátí hodnotu třicet dva, protože znaky jsou různé.

Poznámka: Chcete-li případy ignorovat, můžete použít metodu „compareToIgnoreCase“.

Metoda 4: Metoda StringUtils equals().

Jedno Java StringUtils equals() metoda porovnává rovnost dvou sekvencí znaků.

Ujistěte se, že jste do svého programu přidali knihovnu „org.apache.commons.lang3“. To vám umožní porovnávat řetězce pomocí metod StringUtil.

Pro projekty Maven použijte toto průvodce přidat knihovnu do projektu.

Pokud však chcete přidat knihovnu bez jakýchkoli nástrojů pro sestavení, použijte toto průvodce.

Syntaxe:

public static boolean equals(CharSequnce cs1, CharSequence cs2)

Parametry metody StringUtils equals().

  • cs1 – Posloupnost znaků pro první argument.
  • cs2 – Posloupnost znaků pro druhý argument.

Metoda StringUtils equals() vrací

  • Vrátí hodnotu true, pokud je porovnání řetězců stejné. Platí, pokud do dvou argumentů předáte hodnotu null.
  • Vrátí false, pokud se porovnání řetězců nerovná.

Příklad:

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

Výstup:

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

Vysvětlení:

Protože obsah prvního a druhého řetězce je stejný, výsledek vrátí hodnotu true.

K ignorování případu můžete použít metodu „equalsIgnoreCase“.

Metoda 5: Metoda StringUtils equalsAny()

Jedno Java StringUtils equalsAny() metoda zkontroluje, zda v argumentech existuje řetězec.

Syntaxe:

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

Parametry metody StringUtils equalsAny()

  • string – Řetězcová hodnota pro první argument. Argument může mít také hodnotu null.
  • searchStrings – Sada řetězcových argumentů pro metodu, která má zjistit, zda je přítomen první řetězec argumentů.

Metoda StringUtils equalsAny() vrací

  • Vrátí hodnotu true, pokud řetězec, který má odpovídat, existuje v proměnném počtu vyhledávacích řetězců. To platí, pokud jsou oba argumenty nulové.
  • Vrátí hodnotu false, pokud se odpovídající řetězec neshoduje s žádným řetězcem v proměnné počet vyhledávacích řetězců.

Příklad:

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

Výstup:

is Guru99 available: true
is GURU99 available: false

Vysvětlení:

Protože obsah prvního a druhého řetězce je stejný, výsledek vrátí hodnotu true. K ignorování případu můžete použít metodu „equalsAnyIgnoreCase“.

Metoda 6: Použití operátoru ==

Operátor == na řetězcích kontroluje, zda odkazy na objekty mají stejnou adresu.

Příklad:

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

Očekávaný výstup:

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

Vysvětlení:

  • První výsledek vrátí booleovskou hodnotu true. Řetězce se stejným obsahem se přidávají do stejného fondu řetězců, takže řetězec sdílí jednu adresu.
  • Druhý výsledek vrátí booleovskou hodnotu false. Objekty mají různý obsah, což má za následek jiné fondy řetězců. To znamená, že řetězce mají samostatné odkazy na objekt; takže výstup je nepravdivý.

Metoda 7: Vytvoření vlastní metody pro porovnání dvou řetězců Java

Vytvořte metodu, která porovná dva řetězce pomocí lexikografického pořadí.

Syntaxe:

public static int compareTwoStrings(String str1, String str2)

Parametry vlastní metody

  • str1 – Řetězec k porovnání.
  • str2 – Řetězec, se kterým se má porovnávat.

Vlastní metoda se vrací

  • 0 – Vrátí nulu, pokud je první řetězec roven druhému řetězci.
  • < 0 – Vrátí číslo menší než nula, pokud je první řetězec menší než druhý řetězec.
  • > 0 – Vrátí číslo větší než nula, pokud je první řetězec větší než druhý řetězec.

Příklad:

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

Očekávaný výstup:

is Guru99 equal to Guru99: 0

Vysvětlení:

Výsledek vrátil hodnotu nula, což znamená, že vlastní funkce funguje podle očekávání.

Shrnutí:

Jedno Java Použití metody porovnání dvou řetězců závisí na následujících faktorech.

  • Touha mít kontrolu nad svou metodou. V tomto případě vytvořte vlastní metodu.
  • Nelze použít starší kód. s Java 6 a nižší.
  • Metoda, která má optimální výkon.
  • Typ dat, se kterými pracujete. Například porovnání řetězce ze sady proměnných argumentů.
  • Funkce poskytované externě zajišťovanou knihovnou. Například knihovna StringUtils poskytuje různé metody pro porovnání řetězců.

Shrňte tento příspěvek takto: