Como comparar duas Strings em Java

โšก Resumo Inteligente

Comparando duas strings em Java ร‰ possรญvel realizar essa comparaรงรฃo com diversos mรฉtodos que verificam a igualdade ou a ordem de uma sequรชncia de caracteres. Este recurso explica sete abordagens, incluindo os mรฉtodos `equals` de `String`, `equals` de `Object`, `compareTo`, mรฉtodos da classe `StringUtils`, o operador `==` e um mรฉtodo de comparaรงรฃo personalizado, cada um com exemplos.

  • ๐ŸŸฐ String equals(): Compara dois valores de string para verificar se sรฃo iguais, diferenciando maiรบsculas de minรบsculas, retornando verdadeiro ou falso.
  • ๐Ÿ“ฆ Objetos iguais(): Compara duas strings de forma segura, tratando dois valores nulos como iguais.
  • ๐Ÿ”ค compareTo(): Compara cadeias de caracteres em ordem lexicogrรกfica, retornando zero, um nรบmero negativo ou um nรบmero positivo.
  • ๐Ÿงฐ Mรฉtodos StringUtils: As funรงรตes `equals()` e `equalsAny()` do Apache Commons comparam strings e lidam com valores nulos de forma adequada.
  • โš ๏ธ == Operator: Compara referรชncias de objetos, nรฃo conteรบdos, portanto nรฃo deve ser usado para comparaรงรฃo de valores.

Como comparar duas Strings em Java

Mรฉtodos para comparar strings em Java

Java fornece mรฉtodos diferentes que vocรช pode aproveitar para comparar duas strings em Java. Comparaรงรฃo de strings em Java รฉ um recurso que combina uma sequรชncia de caracteres com uma string.

Para aprender como comparar strings em JavaVocรช pode usar os mรฉtodos fornecidos pelas seguintes classes:

  • Classe String do pacote java.lang.
  • Classe Objects do pacote java.util.
  • Classe StringUtils do pacote org.apache.commons.lang3.

A maioria destes Java Os mรฉtodos de comparaรงรฃo de strings possuem soluรงรตes para ignorar maiรบsculas e minรบsculas. Neste tutorial, vocรช aprenderรก os diferentes mรฉtodos que podem ser usados โ€‹โ€‹para comparar duas strings.

Mรฉtodo 1: mรฉtodo String equals()

O Java Tanga mรฉtodo equals () compara dois objetos string para valores de string iguais.

Sintaxe:

public boolean equals(Object anObject)

Parรขmetros do mรฉtodo equals():

anObject โ€“ A string de argumento para comparar strings.

tipos de retorno do mรฉtodo equals()

  • Retorna verdadeiro se a string literal fornecida for igual ร  primeira string.
  • Retorna falso se a primeira string nรฃo for igual ร  string do argumento.

Exemplo:

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

Resultado esperado:

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

Explicaรงรฃo:

  • Vocรช obteve falso na รบltima saรญda porque o objeto especificado possui um caso diferente.

Observaรงรฃo: Use o mรฉtodo `equals()` da classe `string` para comparar strings diferenciando maiรบsculas de minรบsculas. Use o mรฉtodo `equalsIgnoreCase` para comparar objetos do tipo `string` ignorando maiรบsculas e minรบsculas.

Mรฉtodo 2: Mรฉtodo de objetos equals()

O Java Objetos sรฃo iguais() O mรฉtodo compara dois objetos string para descobrir se eles tรชm os mesmos valores.

Sintaxe:

public static boolean equals(Object a, Object b)

parรขmetros do mรฉtodo equals()

a โ€“ String de argumento para o primeiro objeto string.

b โ€“ String de argumentos para o segundo objeto string.

tipos de retorno do mรฉtodo equals()

  • Retorna verdadeiro se os literais da string forem iguais. Passar um valor nulo nos dois argumentos tambรฉm retornarรก verdadeiro.
  • Retorna falso se os literais da string nรฃo forem iguais.

Exemplo:

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

Saรญda:

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

Explicaรงรฃo:

Neste exemplo, vocรช pode ver que a saรญda รฉ um valor booleano verdadeiro, jรก que as strings comparadas sรฃo iguais.

Mรฉtodo 3: mรฉtodo String compareTo()

O Java String compararTo() O mรฉtodo compara duas strings em ordem alfabรฉtica. Geralmente รฉ chamada de ordem lexicogrรกfica.

Sintaxe:

public int compareTo(String str)

Parรขmetros do mรฉtodo compareTo()

str โ€“ A string a ser comparada com a string atual.

O mรฉtodo compareTo() retorna

  • 0 โ€“ Retorna zero se o objeto especificado for igual ร  string atual.
  • < 0 โ€“ Retorna um nรบmero menor que zero se esta string for menor que o objeto especificado.
  • > 0 โ€“ Retorna um nรบmero maior que zero se esta string exceder a string fornecida.

Exemplo:

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

Resultado esperado:

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

Explicaรงรฃo:

O primeiro resultado retorna o valor zero, jรก que a primeira e a segunda strings sรฃo iguais.

O segundo resultado retorna o valor trinta e dois, jรก que os caracteres sรฃo diferentes.

Observaรงรฃo: Para ignorar maiรบsculas e minรบsculas, vocรช pode usar o mรฉtodo โ€œcompareToIgnoreCaseโ€.

Mรฉtodo 4: mรฉtodo StringUtils equals()

O Java StringUtils รฉ igual() O mรฉtodo compara a igualdade de duas sequรชncias de caracteres.

Certifique-se de ter adicionado a biblioteca โ€œorg.apache.commons.lang3โ€ ao seu programa. Isso permitirรก que vocรช compare strings usando os mรฉtodos da classe StringUtils.

Para projetos Maven, use isto guia para adicionar a biblioteca ao projeto.

No entanto, se vocรช quiser adicionar a biblioteca sem usar nenhuma ferramenta de compilaรงรฃo, use este mรฉtodo. guia.

Sintaxe:

public static boolean equals(CharSequence cs1, CharSequence cs2)

Parรขmetros do mรฉtodo StringUtils equals()

  • cs1 โ€“ Uma sequรชncia de caracteres para o primeiro argumento.
  • cs2 โ€“ Uma sequรชncia de caracteres para o segundo argumento.

O mรฉtodo StringUtils equals() retorna

  • Retorna verdadeiro se a comparaรงรฃo entre as strings resultar em igualdade. Isso tambรฉm se aplica se vocรช passar um valor nulo nos dois argumentos.
  • Retorna falso se a comparaรงรฃo da string nรฃo for igual.

Exemplo:

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

Saรญda:

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

Explicaรงรฃo:

Como o conteรบdo da primeira e da segunda string รฉ igual, o resultado retorna verdadeiro.

Vocรช pode usar o mรฉtodo โ€œequalsIgnoreCaseโ€ para ignorar o caso.

Mรฉtodo 5: mรฉtodo StringUtils equalsAny()

O Java StringUtils รฉ igual aAny() O mรฉtodo verifica se existe uma string nos argumentos.

Sintaxe:

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

Parรขmetros do mรฉtodo StringUtils equalsAny()

  • string โ€“ O valor da string para o primeiro argumento. O argumento tambรฉm pode ter um valor nulo.
  • searchStrings โ€“ Um conjunto de argumentos de string para o mรฉtodo descobrir se a primeira string de argumento estรก presente.

O mรฉtodo StringUtils equalsAny() retorna

  • Retorna verdadeiro se a string a ser correspondida existir no nรบmero variรกvel de strings de busca. Isso se aplica mesmo se ambos os argumentos forem nulos.
  • Retorna falso se a string a ser correspondida nรฃo corresponder a nenhuma string no nรบmero variรกvel de strings de pesquisa.

Exemplo:

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

Saรญda:

is Guru99 available: true
is GURU99 available: false

Explicaรงรฃo:

Como o conteรบdo da primeira e da segunda string sรฃo iguais, o resultado retorna verdadeiro. Vocรช pode usar o mรฉtodo โ€œequalsAnyIgnoreCaseโ€ para ignorar o caso.

Mรฉtodo 6: usando o operador ==

O operador == em strings verifica se as referรชncias de objetos tรชm o mesmo endereรงo.

Exemplo:

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

Resultado esperado:

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

Explicaรงรฃo:

  • O primeiro resultado retorna um valor booleano verdadeiro. Strings com o mesmo conteรบdo sรฃo adicionadas ao mesmo conjunto de strings, portanto, as strings compartilham o mesmo endereรงo.
  • O segundo resultado retorna um valor booleano falso. Os objetos tรชm conteรบdos diferentes, o que resulta em conjuntos de strings diferentes. Isso significa que as strings tรชm referรชncias de objeto separadas; portanto, a saรญda รฉ falsa.

Mรฉtodo 7: Criando um mรฉtodo personalizado para comparar duas strings em Java

Crie um mรฉtodo que compare duas strings usando ordem lexicogrรกfica.

Sintaxe:

public static int compareTwoStrings(String str1, String str2)

Parรขmetros de mรฉtodo personalizado

  • str1 โ€“ A string a ser comparada.
  • str2 โ€“ A string com a qual comparar.

Retornos de mรฉtodos personalizados

  • 0 โ€“ Retorna zero se a primeira string for igual ร  segunda string.
  • < 0 โ€“ Retorna um nรบmero menor que zero se a primeira string for menor que a segunda string.
  • > 0 โ€“ Retorna um nรบmero maior que zero se a primeira string for maior que a segunda string.

Exemplo:

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

Resultado esperado:

is Guru99 equal to Guru99: 0

Explicaรงรฃo:

O resultado retornou um valor zero, significando que a funรงรฃo personalizada estรก funcionando conforme o esperado.

Perguntas Frequentes

Sim. Os assistentes de IA podem recomendar equals, compareTo ou StringUtils com base no seu objetivo e sinalizar a armadilha comum do operador ==. Mesmo assim, vocรช deve confirmar a escolha com testes para seus dados especรญficos.

Sim. As ferramentas de IA detectam o uso incorreto de == para comparaรงรฃo de conteรบdo e sugerem equals ou equalsIgnoreCase em vez disso. Isso ajuda a reduzir erros sutis de igualdade que sรฃo comuns para iniciantes que trabalham com strings.

O operador == compara referรชncias de objetos, nรฃo o conteรบdo. Duas strings com o mesmo valor podem ter referรชncias diferentes, portanto == pode retornar falso. Use equals() para uma comparaรงรฃo de valores confiรกvel.

O mรฉtodo equals() diferencia maiรบsculas de minรบsculas, portanto โ€œGuru"99" e "GURU99" nรฃo sรฃo iguais. O mรฉtodo equalsIgnoreCase() compara strings ignorando as diferenรงas entre maiรบsculas e minรบsculas, retornando verdadeiro em ambos os casos.

Resuma esta postagem com: