Strings in Java vergelijken

1. Overzicht

In dit artikel zullen we het hebben over de verschillende manieren om te vergelijken Snaren in Java.

Net zo Draad is een van de meest gebruikte gegevenstypen in Java, dit is natuurlijk een veel gebruikte bewerking.

2. Draad Vergelijking met Draad Klasse

2.1. Gebruik makend van “==” Vergelijkingsoperator

Het gebruik van de "==" operator voor het vergelijken van tekstwaarden is een van de meest voorkomende fouten die Java-beginners maken. Dit is onjuist omdat “==” controleert alleen de referentiële gelijkheid van twee Snaren, wat betekent of ze naar hetzelfde object verwijzen of niet.

Laten we een voorbeeld van dit gedrag bekijken:

String string1 = "met behulp van vergelijkingsoperator"; String string2 = "met behulp van vergelijkingsoperator"; String string3 = nieuwe String ("met vergelijkingsoperator"); assertThat (string1 == string2) .isTrue (); assertThat (string1 == string3) .isFalse ();

In het bovenstaande voorbeeld is de eerste bewering waar omdat de twee variabelen naar hetzelfde wijzen Draad letterlijk.

Aan de andere kant is de tweede bewering onjuist omdat tekenreeks1 is gemaakt met een letterlijke en tekenreeks3 wordt gemaakt met de nieuw operator - daarom verwijzen ze naar verschillende objecten.

2.2. Gebruik makend van is gelijk aan ()

De Draad klasse overschrijft de is gelijk aan () geërfd van Voorwerp. Deze methode vergelijkt twee Snaren teken voor teken, waarbij ze hun adres negeren.

Het beschouwt ze als gelijk als ze dezelfde lengte hebben en de karakters in dezelfde volgorde staan:

String string1 = "gebruikt is gelijk aan methode"; String string2 = "gebruikt is gelijk aan methode"; String string3 = "met behulp van de EQUALS-methode"; String string4 = nieuwe String ("gebruikt is gelijk aan methode"); assertThat (string1.equals (string2)). isTrue (); assertThat (string1.equals (string4)). isTrue (); assertThat (string1.equals (null)). isFalse (); assertThat (string1.equals (string3)). isFalse ();

In dit voorbeeld tekenreeks1, tekenreeks2, en tekenreeks4 variabelen zijn gelijk omdat ze hetzelfde hoofdlettergebruik en dezelfde waarde hebben, ongeacht hun adres.

Voor tekenreeks3 de methode keert terug vals, omdat het hoofdlettergevoelig is.

Ook als een van de twee strings nul, dan keert de methode terug false.

2.3. Gebruik makend van equalsIgnoreCase ()

De equalsIgnoreCase () methode retourneert een booleaanse waarde. Zoals de naam suggereert deze methode negeert hoofdletters / kleine letters in tekens tijdens het vergelijken Snaren:

String string1 = "gebruik is gelijk aan negeer hoofdletter"; String string2 = "GEBRUIK VAN GELIJKE CASE NEGEREN"; assertThat (string1.equalsIgnoreCase (string2)). isTrue ();

2.4. Gebruik makend van vergelijk met()

De vergelijk met() methode retourneert een int typ waarde en vergelijkt twee Snaren karakter voor karakter lexicografisch gebaseerd op een woordenboek of natuurlijke ordening.

Deze methode retourneert 0 als twee Snaren zijn gelijk of als beide zijn nul, een negatief getal als de eerste Draad komt voor het argument, en een getal groter dan nul als het eerste Draad komt na het argument Draad.

Laten we een voorbeeld bekijken:

String author = "author"; String book = "boek"; String duplicateBook = "boek"; assertThat (author.compareTo (boek)) .isEqualTo (-1); assertThat (book.compareTo (auteur)) .isEqualTo (1); assertThat (duplicateBook.compareTo (boek)) .isEqualTo (0);

2.5. Gebruik makend van vergelijkToIgnoreCase ()

De vergelijkToIgnoreCase () is vergelijkbaar met de vorige methode, behalve dat het hoofdlettergebruik negeert:

String author = "Auteur"; String book = "boek"; String duplicateBook = "BOEK"; assertThat (author.compareToIgnoreCase (boek)) .isEqualTo (-1); assertThat (book.compareToIgnoreCase (auteur)) .isEqualTo (1); assertThat (duplicateBook.compareToIgnoreCase (boek)) .isEqualTo (0);

3. Draad Vergelijking met Voorwerpen Klasse

Voorwerpen is een utility class die een static bevat is gelijk aan () methode, handig in dit scenario - om twee te vergelijken Snaren.

De methode keert terug waar als twee Snaren zijn gelijk door eerste ze vergelijken met hun adres dat wil zeggen "==”. Bijgevolg, als beide argumenten zijn nul, het keert terug waar en als precies één argument is nul, het retourneert false.

Anders roept het gewoon de is gelijk aan () methode van de klasse van het type van het doorgegeven argument - wat in ons geval is String's klasse is gelijk aan () methode. Deze methode is hoofdlettergevoelig omdat deze intern aanroept Draad klas is gelijk aan () methode.

Laten we dit testen:

String string1 = "gebruik van objecten is gelijk aan"; String string2 = "gebruik van objecten is gelijk aan"; String string3 = nieuwe String ("met behulp van objecten is gelijk aan"); assertThat (Objects.equals (string1, string2)). isTrue (); assertThat (Objects.equals (string1, string3)). isTrue (); assertThat (Objects.equals (null, null)). isTrue (); assertThat (Objects.equals (null, string1)). isFalse ();

4. Draad Vergelijking met Apache Commons

De Apache Commons-bibliotheek bevat een utility-klasse met de naam StringUtils voor Draad-gerelateerde operaties; dit heeft ook een aantal zeer gunstige methoden voor Draad vergelijking.

4.1. Gebruik makend van is gelijk aan () en equalsIgnoreCase ()

De is gelijk aan () methode van StringUtils class is een verbeterde versie van de Draad class methode is gelijk aan (), die ook null-waarden verwerkt:

assertThat (StringUtils.equals (null, null)) .isTrue (); assertThat (StringUtils.equals (null, "is gelijk aan methode")) .isFalse (); assertThat (StringUtils.equals ("is gelijk aan methode", "is gelijk aan methode")) .isTrue (); assertThat (StringUtils.equals ("equals method", "EQUALS METHODE")) .isFalse ();

De equalsIgnoreCase () methode van StringUtils geeft een terug boolean waarde. Dit werkt op dezelfde manier als is gelijk aan (), behalve dat het hoofdlettergebruik van tekens in Snaren:

assertThat (StringUtils.equalsIgnoreCase ("is gelijk aan methode", "is gelijk aan methode")) .isTrue (); assertThat (StringUtils.equalsIgnoreCase ("is gelijk aan methode", "IS EQUALS METHODE")) .isTrue ();

4.2. Gebruik makend van equalsAny () en equalsAnyIgnoreCase ()

De equalsAny () Het eerste argument van de methode is een Draad en de tweede is een type met meerdere args CharSequence. De methode keert terug waar als een van de andere gegeven Snaren wedstrijd tegen de eerste Draad case gevoelig.

Anders wordt false geretourneerd:

assertThat (StringUtils.equalsAny (null, null, null)) .isTrue (); assertThat (StringUtils.equalsAny ("gelijk aan enig", "gelijk aan gelijk welk", "gelijk aan")) .isTrue (); assertThat (StringUtils.equalsAny ("gelijk aan willekeurig", null, "gelijk aan gelijk welk")) .isTrue (); assertThat (StringUtils.equalsAny (null, "gelijk aan", "willekeurig")) .isFalse (); assertThat (StringUtils.equalsAny ("is gelijk aan elk", "GELIJK AAN ELK", "ELK")) .isFalse ();

De equalsAnyIgnoreCase () methode werkt op dezelfde manier als de equalsAny () methode, maar negeert ook casing:

assertThat (StringUtils.equalsAnyIgnoreCase ("negeer hoofdletter", "IGNORE CASE", "elke")). isTrue ();

4.3. Gebruik makend van vergelijken() en vergelijkIgnoreCase ()

De vergelijken() methode in StringUtils klasse is een null-veilige versie van het vergelijk met() methode van Draad klasse en handvatten nul waarden door gezien een nul waarde minder dan een niet-nul waarde. Twee nul waarden worden als gelijk beschouwd.

Bovendien kan deze methode worden gebruikt om een ​​lijst met Snaren met nul inzendingen:

assertThat (StringUtils.compare (null, null)) .isEqualTo (0); assertThat (StringUtils.compare (null, "abc")) .isEqualTo (-1); assertThat (StringUtils.compare ("abc", "bbc")) .isEqualTo (-1); assertThat (StringUtils.compare ("bbc", "abc")) .isEqualTo (1);

De vergelijkIgnoreCase () methode gedraagt ​​zich op dezelfde manier, behalve dat het casing negeert:

assertThat (StringUtils.compareIgnoreCase ("Abc", "bbc")) .isEqualTo (-1); assertThat (StringUtils.compareIgnoreCase ("bbc", "ABC")) .isEqualTo (1); assertThat (StringUtils.compareIgnoreCase ("abc", "ABC")) .isEqualTo (0);

De twee methoden kunnen ook worden gebruikt met een nullIsLess keuze. Dit is een derde boolean argument dat beslist of null-waarden als minder moeten worden beschouwd of niet.

EEN nul waarde is lager dan een andere Draad als nullIsLess is waar en hoger als nullIsLess is fout.

Laten we het uitproberen:

assertThat (StringUtils.compare (null, "abc", true)) .isEqualTo (-1); assertThat (StringUtils.compare (null, "abc", false)) .isEqualTo (1);

De vergelijkIgnoreCase () methode met een derde boolean argument werken op dezelfde manier, behalve door hoofdlettergebruik te negeren.

5. Conclusie

In deze korte tutorial hebben we verschillende manieren om te vergelijken besproken Snaren.

En, zoals altijd, is de broncode voor de voorbeelden te vinden op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found