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: