Comment comparer deux chaînes dans Java

⚡ Résumé intelligent

Comparaison de deux chaînes de caractères dans Java Plusieurs méthodes permettent de comparer une séquence de caractères afin de déterminer son égalité ou son ordre. Cette ressource explique sept approches, notamment les méthodes `equals` pour les chaînes de caractères et les objets, `compareTo`, les méthodes `StringUtils`, l'opérateur `==` et une méthode de comparaison personnalisée, chacune illustrée par des exemples.

  • 🟰 La chaîne equals() : Compare deux chaînes de caractères en fonction de la casse et renvoie vrai ou faux.
  • 📦 Les objets sont égaux à : Compare deux chaînes de caractères en toute sécurité, en considérant deux valeurs nulles comme égales.
  • 🔤 comparerÀ() : Compare les chaînes de caractères dans l'ordre lexicographique et renvoie zéro, un nombre négatif ou un nombre positif.
  • 🧰 Méthodes StringUtils : Les fonctions equals() et equalsAny() d'Apache Commons comparent les chaînes de caractères et gèrent les valeurs nulles avec élégance.
  • ⚠️ == Operator: Compare les références des objets, et non leur contenu ; il ne faut donc pas l'utiliser pour comparer des valeurs.

Comment comparer deux chaînes dans Java

Méthodes pour comparer des chaînes dans Java

Java fournit différentes méthodes que vous pouvez exploiter pour comparer deux chaînes dans Java. Comparaison de chaînes dans Java est une fonctionnalité qui fait correspondre une séquence de caractères à une chaîne.

Pour apprendre à comparer des chaînes dans Java, vous pouvez utiliser les méthodes fournies par les classes suivantes :

  • Classe String du package java.lang.
  • Classe Objects du package java.util.
  • Classe StringUtils du package org.apache.commons.lang3.

La plupart de ceux-ci Java Les méthodes de comparaison de chaînes de caractères permettent de s'affranchir de la casse. Ce tutoriel vous présentera les différentes méthodes disponibles pour comparer deux chaînes de caractères.

Méthode 1 : méthode String equals()

Le Java Chaîne méthode equals() compare deux objets chaîne pour des valeurs de chaîne égales.

syntaxe:

public boolean equals(Object anObject)

Paramètres de la méthode equals() :

anObject – La chaîne d'argument pour comparer les chaînes.

types de retour de la méthode equals()

  • Renvoie vrai si la chaîne littérale fournie est la même que la première chaîne.
  • Renvoie false si la première chaîne n'est pas la même que la chaîne d'argument.

Exemple :

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

Production attendue:

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

Explication:

  • Vous avez obtenu false dans la dernière sortie car l'objet spécifié a une casse différente.

À noter: Utilisez la méthode `equals()` pour comparer des chaînes de caractères en tenant compte de la casse. Utilisez la méthode `equalsIgnoreCase` pour comparer des chaînes de caractères sans tenir compte de la casse.

Méthode 2 : méthode Objets égaux()

Le Java Objets égaux() La méthode compare deux objets chaîne pour déterminer s’ils ont les mêmes valeurs.

syntaxe:

public static boolean equals(Object a, Object b)

Paramètres de la méthode equals()

a – Chaîne d’argument pour le premier objet chaîne.

b – Chaîne d’argument pour le deuxième objet chaîne.

types de retour de la méthode equals()

  • Renvoie vrai si les littéraux de chaîne sont égaux. Passer une valeur nulle dans les deux arguments renverra également vrai.
  • Renvoie false si les littéraux de chaîne ne sont pas égaux.

Exemple :

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

Sortie :

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

Explication:

Cet exemple montre que le résultat est une valeur booléenne « vrai », puisque les chaînes comparées sont égales.

Méthode 3 : méthode String compareTo()

Le Java Chaîne comparerTo() La méthode compare deux chaînes par ordre alphabétique. On parle généralement d’ordre lexicographique.

syntaxe:

public int compareTo(String str)

Paramètres de la méthode compareTo()

str – La chaîne à comparer à la chaîne actuelle.

La méthode compareTo() renvoie

  • 0 – Renvoie zéro si l'objet spécifié est égal à la chaîne actuelle.
  • < 0 – Renvoie un nombre inférieur à zéro si cette chaîne est inférieure à l'objet spécifié.
  • > 0 – Renvoie un nombre supérieur à zéro si cette chaîne dépasse la chaîne fournie.

Exemple :

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

Production attendue:

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

Explication:

Le premier résultat renvoie la valeur zéro, puisque les première et deuxième chaînes de caractères sont égales.

Le deuxième résultat renvoie la valeur trente-deux, puisque les caractères sont différents.

À noter: Pour ignorer la casse, vous pouvez utiliser la méthode « compareToIgnoreCase ».

Méthode 4 : méthode StringUtils equals()

Le Java StringUtils est égal à() La méthode compare l’égalité de deux séquences de caractères.

Assurez-vous d'avoir ajouté la bibliothèque « org.apache.commons.lang3 » à votre programme. Cela vous permettra de comparer des chaînes de caractères à l'aide des méthodes StringUtils.

Pour les projets Maven, utilisez ceci guide pour ajouter la bibliothèque au projet.

Toutefois, si vous souhaitez ajouter la bibliothèque sans aucun outil de compilation, utilisez ceci. guide.

syntaxe:

public static boolean equals(CharSequence cs1, CharSequence cs2)

Paramètres de la méthode StringUtils equals()

  • cs1 – Une séquence de caractères pour le premier argument.
  • cs2 – Une séquence de caractères pour le deuxième argument.

La méthode StringUtils equals() renvoie

  • Renvoie vrai si les chaînes de caractères comparées sont égales. Cela fonctionne également si vous passez une valeur nulle en arguments.
  • Renvoie false si la comparaison de chaînes n'est pas égale.

Exemple :

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

Sortie :

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

Explication:

Puisque les contenus de la première et de la deuxième chaîne sont égaux, le résultat renvoie vrai.

Vous pouvez utiliser la méthode « equalsIgnoreCase » pour ignorer la casse.

Méthode 5 : méthode StringUtils equalsAny()

Le Java StringUtils est égal à Any() La méthode vérifie si une chaîne existe dans les arguments.

syntaxe:

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

Paramètres de la méthode StringUtils equalsAny()

  • string – La valeur de chaîne pour le premier argument. L'argument peut également avoir une valeur nulle.
  • searchStrings – Un ensemble d'arguments de chaîne pour que la méthode recherche si la première chaîne d'argument est présente.

La méthode StringUtils equalsAny() renvoie

  • Renvoie vrai si la chaîne recherchée figure parmi le nombre variable de chaînes de recherche. Ceci est valable même si les deux arguments sont nuls.
  • Renvoie false si la chaîne à rechercher ne correspond à aucune chaîne du nombre variable de chaînes de recherche.

Exemple :

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

Sortie :

is Guru99 available: true
is GURU99 available: false

Explication:

Puisque les contenus de la première chaîne et de la deuxième chaîne sont égaux, le résultat renvoie vrai. Vous pouvez utiliser la méthode «equalsAnyIgnoreCase» pour ignorer la casse.

Méthode 6 : Utilisation de l’opérateur ==

L'opérateur == sur les chaînes vérifie si les références d'objet ont la même adresse.

Exemple :

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

Production attendue:

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

Explication:

  • Le premier résultat renvoie la valeur booléenne « vrai ». Les chaînes de caractères ayant le même contenu sont ajoutées au même pool de chaînes ; elles partagent donc une même adresse.
  • Le second résultat renvoie la valeur booléenne « faux ». Les objets ont un contenu différent, ce qui entraîne des pools de chaînes de caractères différents. Cela signifie que les chaînes ont des références d'objet distinctes ; par conséquent, le résultat est « faux ».

Méthode 7 : création d'une méthode personnalisée pour comparer deux chaînes dans Java

Créez une méthode qui compare deux chaînes en utilisant l'ordre lexicographique.

syntaxe:

public static int compareTwoStrings(String str1, String str2)

Paramètres de méthode personnalisés

  • str1 – La chaîne à comparer.
  • str2 – La chaîne à comparer.

Retours de méthode personnalisée

  • 0 – Renvoie zéro si la première chaîne est égale à la deuxième chaîne.
  • < 0 – Renvoie un nombre inférieur à zéro si la première chaîne est inférieure à la deuxième chaîne.
  • > 0 – Renvoie un nombre supérieur à zéro si la première chaîne est supérieure à la deuxième chaîne.

Exemple :

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

Production attendue:

is Guru99 equal to Guru99: 0

Explication:

Le résultat a renvoyé une valeur zéro, ce qui signifie que la fonction personnalisée fonctionne comme prévu.

FAQ

Oui. Les assistants IA peuvent recommander equals, compareTo ou StringUtils en fonction de votre objectif et signaler l'écueil fréquent de l'opérateur ==. Il est toutefois conseillé de confirmer ce choix par des tests sur vos données spécifiques.

Oui. Les outils d'IA détectent les erreurs d'utilisation de l'opérateur == pour la comparaison de contenu et suggèrent plutôt equals ou equalsIgnoreCase. Cela permet de réduire les erreurs d'égalité subtiles, fréquentes chez les débutants qui travaillent avec des chaînes de caractères.

L'opérateur == compare les références d'objets, et non leur contenu. Deux chaînes de caractères ayant la même valeur peuvent avoir des références différentes ; par conséquent, == peut renvoyer faux. Utilisez equals() pour une comparaison de valeurs fiable.

La méthode equals() est sensible à la casse, donc «Guru« 99 » et « GURU99 » ne sont pas égaux. La méthode equalsIgnoreCase() compare les chaînes de caractères en ignorant la casse (majuscules/minuscules) et renvoie vrai dans les deux cas.

Résumez cet article avec :