GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[RESOLVIDO] NetBeans retornando símbolos em palavras acentuadas

Tags: #<Tag:0x00007f0baa4e5f90>

Olá pessoal, gostaria de uma ajuda. Estou aprendendo a programar e estou tendo meus primeiros contatos com a linguagem java e junto com isso também estão surgindo as primeiras dúvidas.
O problema parece ser simples, entrar com um nome e se esse for “José”, imprimi-lo, onde a entrada pode ser (JOSE, JOSÉ, Jose, José, jose ou josé). Porém quando faço a entrada pelo teclado só retorna “O nome está correto” quando digito as opões sem o acento, quando faço a entrada com acento, retorna “O nome inserido está incorreto”. Isso acontece nas três opções de código abaixo.

Como estou iniciando possa ser que esteja cometendo um erro muito simples, ou possa ser que seja algo que ainda não faço a mínima ideia. De qualquer forma não conseguir compreender o motivo do problema.

Desde já; agradeço pelas respostas…

     //OPÇÃO1
    System.out.println("ENTRAR COM O NOME DE UMA PESSOA E SÓ IMPRIMI-LÓ SE FOR JOSÉ");
    String a107 = tecl.nextLine();
    String b107 = "JOSE";
    String c107 = "JOSÉ";
    if (b107.equalsIgnoreCase(a107) || c107.equalsIgnoreCase(a107)) {
        System.out.println("O nome esta correto");
    } else {
        System.out.println("O nome inserido está incorreto");
    }

   // OPÇÃO2
    System.out.println("ENTRAR COM O NOME DE UMA PESSOA E SÓ IMPRIMI-LÓ SE FOR JOSÉ");
    String x107 = tecl.nextLine();
    if ((x107.equals("JOSÉ")) || (x107.equals("JOSE")) || (x107.equals("José")) || (x107.equals("Jose")) || (x107.equals("josé")) || (x107.equals("jose"))) {
        System.out.println("O nome está correto");
    } else {
        System.out.println("O nome inserido está incorreto");
    }

    //OPÇÃO3 OBS: Não tenho muito domínio com essa opção, foi Ctrl-C/Ctrl-V, mas também não funcionou. (As classes Collator e Locale foram importadas)
    System.out.println("ENTRAR COM O NOME DE UMA PESSOA E SÓ IMPRIMI-LÓ SE FOR JOSÉ");
    String n = tecl.nextLine();
    String st1 = "JOSE";
    String st2 = "JOSÉ";

    Collator coll = Collator.getInstance(new Locale("pt", "BR"));
    coll.setStrength(Collator.PRIMARY);
    if ((coll.compare(n, st1) == 0) || (coll.compare(n, st2) == 0)) {
        System.out.println("O nome está correto");
    } else {
        System.out.println("O nome inserido está incorreto");
    }
    // Nesta opção caso a variável n seja substituída por st2 e st1 respectivamente, dentro do comando de seleção ele retorna true.

A sua opção 3 é a mais correta. Acho estranho ela não estar funcionando. Inclusive você pode comparar somente com st1. Pois a comparação com st2 usando Collator.PRIMARY é redundante.

Se está falhando nesse ponto então a sua variável n está com algum valor errado. Se você imprimir o valor de n o que aparece no seu console?

Obrigado pela dica, fiz a retirada da st2…

n está recebendo a entrada pelo teclado.
Agora que imprimir a variável n isolada, percebi que realmente esta acontecendo algo de errado com o acento, porém ainda continuo sem saber o motivo. (está retornando um caractere especial, no NetBeans apareceu um quadrado, aqui um losango com interrogação)

RESULTADO:

run:
ENTRAR COM O NOME DE UMA PESSOA E SÓ IMPRIMI-LÓ SE FOR JOSÉ
josé
O nome inserido está incorreto
jos�
CONSTRUÍDO COM SUCESSO (tempo total: 4 segundos)

Me parece que você está com algum problema de encoding. O seu arquivo provavelmente está usando encoding UTF-8, portanto na hora de instanciar seu Scanner tecl, tente fazer assim:

Scanner tecl = new Scanner(System.in, "UTF-8");

Sem solução, mesmo adicionando a codificação… também tentei fazer a alteração para outros tipos de código pelo caminho :projeto[botão direito]/propriedades/codificação (UTF-8/ISO-LATIN-1/ISO-8859-1 e outros mais), Mas sem sucesso.

Em relação ao código, parece está funcionando. Compilei online neste link (https://www.onlinegdb.com/online_java_compiler) e funcionou normalmente.

     //OPÇÃO3
    System.out.println("ENTRAR COM O NOME DE UMA PESSOA E SÓ IMPRIMI-LÓ SE FOR JOSÉ");
    String n = tecl.nextLine();
    String st1 = "JOSE";

    Collator coll = Collator.getInstance(new Locale("pt", "BR"));
    coll.setStrength(Collator.PRIMARY);
    if ((coll.compare(n, st1) == 0)) { 
        System.out.println("O nome está correto");
    } else {
        System.out.println("O nome inserido está incorreto");
    }
    System.out.println(n); // só para verificar a variável n, porque está retornando caractere especial quando digitado(é)
}

}

Acho que o problema pode está no NetBeans, vou continuar vasculhando, qualquer novidade posto aqui…
Mas se você tiver mais alguma ideia, ajudaria…

obrigado…

[Resolvido] Caso alguém tenha problema semelhante, vou deixar a solução…
O problema realmente estava no NetBeans.

NetBeans IDE 8.0.1
Windows 10 home

Foi necessário fazer uma alteração no arquivo “netbeans.conf” (executar o notepad como administrador)
C:\Program Files\NetBeans 8.0.1\etc\netbeans.conf

Depois do parâmetro -J-Dsun.zip.disableMemoryMapping=true é só adicionar o parâmetro -J-Dfile.encoding=UTF-8 e reiniciar o software. Aqui funcionou normalmente depois dessa alteração…

link solução: https://pt.stackoverflow.com/questions/33712/netbeans-bagunçando-acentuação/33730