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) {
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: riobrancorecomendo 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 2 curtidas
ARandomProgrammer:
+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. 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 ==.
|