Como comparar pedaços de string

Estou com uma duvida em relação a comparação equals. Quando vou comparar uma resposta em String que é composta, ele considera como se fosse duas respostas, qual comando eu uso para ele ignorar o espaço e comparar como uma só.

public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);

String [] estados = new String [10]; String [] capitais = new String [10]; String resp; estados [0] = "Acre"; capitais [0] = "Rio Branco"; for (int i = 0; i < 9; i++) { System.out.println("Fale qual é a capital desse estado : " + estados[i]); resp = teclado.next(); if (resp.equalsIgnoreCase(capitais[i])) { System.out.println("Parabens você acertou"); }else System.out.println("A resposta certa é : " + capitais[i]);

Fale qual é a capital desse estado : Acre Rio Branco

A resposta certa é : Rio Branco

bom vc pode usar o comando replace para remover o espaço ex:

String nome = "Rio Branco"; //troca o espaço por nada. String semEspaco = nome.replace(" ", ""); System.out.println("Sem espaço: " + semEspaco); //coloca todas as letras minusculas. String minusculas = semEspaco.toLowerCase(); System.out.println("Letras pequenas: " + minusculas);

A saída vai ser:

Sem espaço: RioBranco Letras pequenas: riobranco

recomendo utilizar o método toLowerCase q deixa tudo minúsculo, assim independente de o usuario escreve com alguma letra maiuscula ou minuscula a resposta ficaria certa.

Obs:[quote=“Bernal, post:1, topic:350537”] resp = teclado.next();

[/quote]

o método next() só pega o nome inicial, exemplo se tu digitar no console Rio Branco, ele só pega Rio, então vc deve trocar pelo método nextLine() que pega toda a linha digitada.

resp = teclado.nextLine();

2 curtidas

Como o amigo disse acima, vc pode usar o método replace(), mas o replace() serve para trocar pedaços de uma String por outro… Existe um método q foi criado só para remover todos os espaços de uma String, chama trim()

basta apenas incrementar no seu if:

if (resp.trim().equalsIgnoreCase(capitais[i].trim())) S.o.p ("Acertou xD");

recomendo q incremente o método toLowerCase() nos dois tbm
Abraço

2 curtidas

Como comparar pedaços de string
ARandomProgrammer:

Como o amigo disse acima, vc pode usar o método replace(), mas o replace() serve para trocar pedaços de uma String por outro… Existe um método q foi criado só para remover todos os espaços de uma String, chama trim()

basta apenas incrementar no seu if:

if (resp.trim().equalsIgnoreCase(capitais[i].trim()))
S.o.p (“Acertou xD”);

recomendo q incremente o método toLowerCase() nos dois tbm
Abraço

+1

1 curtida

Isso mesmo amigo, mas só uma observação para o colega que está com dúvida, no caso o trim() não remove “Todos” os espaços dentro de uma string, ele remove somente os espaços no inicio e fim de uma String.
Aí se vc precisar remover os espaços de inicio e fim e também entre as palavras, combina o trim() com replace()

2 curtidas

Eu testei aqui , deu certo. Muito obrigado

Recentemente num projeto Android, eu cai na armadilha de comparar duas Strings com operador == e por não testar o código (nunca repitam isso crianças), o tiro acabou saindo pela culatra. Por esse motivo resolvi escrever esse artigo para explicar como comparar Strings em Java da forma correta. Então bora lá…

Essa foi a linha de código que me deu dor de barriga:

if (anoBat == "0") { ... }

É uma simples condição onde comparo um variável (do tipo String) com um uma outra String literal. Simples né? Num primeiro momento talvez você ache que retorne TRUE correto? Porém não foi isso que aconteceu… 😭

Vamos as explicações!

Uma coisa que precisa ficar bem claro: String em Java é um objeto!

O Java utiliza um mecanismo chamado String Interning. Ele armazena num pool de memória apenas uma cópia de cada valor distinto de String (que deve ser imutável).

Esse conjunto de caracteres literais formam uma instancia de String. Logo é possível comprar duas VARIÁVEIS do tipo String com o operador ==

String a = "str"; String b = "str"; System.out.printLn(a == b); // retorna TRUE

Porém não é inteligente confiar nesse operador de comparação uma vez que não sabemos como a String foi instanciada, por exemplo:

String a = "str"; String b = "string"; String c = b.substring(0,3); // c:"str" System.out.printLn(a == c); // retorna FALSE

Mas porque retornou FALSE? 🤔

No código acima foi criada uma NOVA instância de String, que não é a mesma retornada pela JVM para o literal “str”. (Lembre-se, cada instância de objeto tem um identificador único)

Apesar de existir duas instâncias distintas, lá no pool de memória continua existindo apenas uma entrada (imutável) para “str”.

Tá certo, mas como validar isso? Existe o método String.intern() que retorna uma referência para a String que está no pool. Exemplo:

String a = "str"; String b = "string"; String c = b.substring(0,3); // c:"str" System.out.printLn(a == c.intern()); // retorna TRUE

Legal né? Mas nem tudo são flores…

Mas e o tal do equals()?

Em resumo o método equals() simplesmente compara a estrutura entre dois objetos (em nosso caso os caracteres literais), sem a necessidade de atribuir novos valores (ou ter acesso) ao pool.

A comparação com == é mais rápida que utilizando o método equals(), porém não é sábio (nem recomendado) usar intern(). Saca só:

Nem todas as Strings são armazenadas no pool imediatamente. Quando chamamos o método intern(), caso a String ainda não exista, o Java vai acrescenta-la ao pool. O PROBLEMA é que uma vez no pool essa String vai para a memória permanente e não será mais coletada pelo garbage collector.

Se você usar incansavelmente o intern(), em processamentos pouco mais pesados como arquivos de texto, XML, banco de dados, é bem provável que você possa ter um estouro de pilha (OutOfMemoryError).

Então o que usar?

SEMPRE que for comparar duas Strings use o método equals(). Simples assim. Você evita muita dor de cabeça desnecessária. 😁

String a = "str"; System.out.printLn(a.equals("str")); // retorna TRUE

E aí curtiu? Conseguiu clarear as idéias? Deixe sua opinião logo abaixo, me fala se já passou por algo parecido e como foi combinado? 👊

'Este exemplo mostra como comparar strings usando 'o método Compare() da classe String. 'Lembre-se de que a versão do método que usamos neste 'exemplo diferencia maiúsculas de minúsculas. Module Module1 Sub Main() Dim palavra1, palavra2 As String palavra1 = "Visual Basic" palavra2 = "Visual Basic" If String.Compare(palavra1, palavra2) = 0 Then Console.WriteLine("As duas strings são iguais") Else Console.WriteLine("As duas strings são diferentes") End If Console.ReadKey() End Sub End Module

Comparar o tamanho de strings é uma função comum na programação da linguagem C, pois ela permite verificar qual delas contém mais caracteres. Tal recurso é muito útil para ordenar dados. Comparar strings requer uma função especial; não use != ou ==.

  1. 1

    Na linguagem C, existem duas funções que permitem comparar strings. Ambas as funções fazem parte da biblioteca <string.h>.

    • strcmp() : Essa função compara duas strings e retorna a diferença no número de caracteres.
    • strncmp() : Semelhante à função strcmp(), exceto que esta compara os n primeiros caracteres das strings. Ela é considerada uma função mais segura, pois ajuda a evitar que ocorra overflow.

  2. 2

    Inicie o programa com as bibliotecas necessárias. Você vai precisar das bibliotecas <stdio.h> e <string.h>, juntamente com todas as outras bibliotecas necessárias para o programa.

    #include <stdio.h> #include <string.h>

  3. 3

    Inicie com a função .int. Esta é a forma mais fácil de aprender a função, já que ela retornará um valor inteiro que compara o tamanho das duas strings.

    #include <stdio.h> #include <string.h> int main () { }

  4. 4

    Defina as duas strings que você deseja comparar. Para este exemplo, iremos comparar duas strings char. Defina também o valor retornado como um inteiro.[1] X Fonte de pesquisa Ir à fonte

    #include <stdio.h> #include <string.h> int main () { char *str1 = "melancia"; char *str2 = "laranja"; int ret; }

  5. 5

    Inclua a função escolhida. Agora que você tem as duas strings definidas, adicione a função para compará-las. Neste exemplo, usaremos strncmp(), portanto devemos definir na função o número de caracteres que serão comparados.

    #include <stdio.h> #include <string.h> int main () { char *str1 = "melancia"; char *str2 = "laranja"; int ret; ret = strncmp(str1, str2, 6); /*Aqui, a função irá comparar os 6 primeiros caracteres */ }

  6. 6

    Use a estrutura .if...else para fazer a comparação. Depois de incluir a função no seu código, use a estrutura if...else para exibir qual das duas strings é maior. A função strncmp() retornará o valor 0 se as strings tiverem o mesmo comprimento, um número positivo se str1 for maior e um número negativo se str2 for maior.

    #include <stdio.h> #include <string.h> int main () { char *str1 = "melancia"; char *str2 = "laranja"; int ret; ret = strncmp(str1, str2, 6); if(ret > 0) { printf("str1 é maior"); } else if(ret < 0) { printf("str2 é maior"); } else { printf("As duas palavras são iguais"); } return(0); }

  • Lembre-se de que, se as strings forem iguais, o valor retornado será 0. Isso pode confundir, já que esse valor numérico também representa o valor lógico FALSE.