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 :