Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

PROBLEMA COM IgnoreCase

Pessoal alguém poderia por favor me ajudar nesse método, ele de pegar um texto e ir alterando as palavras certas pelas erradas a medida que forem sendo encontradas.

Mas eu preciso que ele ignore maiúsculas e minusculas e estou batendo cabeça, mais uma vez por favor alguém?

package Features;

public class AlteraMensagem {

    public void mensagem(String mensagem) {
        String[] certas = { "Oferta", "Promoção", "Oportunidade" }; // palavras corretas.
        String[] erradas = { "0fert4", "Pr0moçã0", "0portun1dade" }; // palavras incorretas.

        String recebeMensagem = null;
        String texto = mensagem;
        boolean b = true;

        for (int i = 0; i < certas.length; i++) {

            if (texto.contains(certas[i])) { // verifico se a String TEXTO existe no array CERTAS.
                recebeMensagem = texto.replaceAll(certas[i], erradas[i]); // alterando os arrays pela mesma posição.
                texto = recebeMensagem;
                b = false;
            }

        }

        if (b == false) {
            System.out.println(recebeMensagem);
        } else {
            System.out.println(texto);
        }

    }

}
3 respostas
solução!

Tanto para ver se o texto possui uma palavra como para substituir aonde encontrar esta palavra, com case insensitive (ignorando maiúsculas e minusculas) precisa ser usado uma flag de expressão regular. A tag i.

O código fica assim:

public class AlteraMensagem {

  public void mensagem(String mensagem) {
    String[] certas = { "Oferta", "Promoção", "Oportunidade" }; // palavras corretas.
    String[] erradas = { "0fert4", "Pr0moçã0", "0portun1dade" }; // palavras incorretas.

    String recebeMensagem = null;
    String texto = mensagem;
    boolean b = true;

    for (int i = 0; i < certas.length; i++) {

      if (texto.matches("(?i:.*"+certas[i]+".*)")) { // verifico se a String TEXTO existe no array CERTAS.
        recebeMensagem = texto.replaceAll("(?i)"+certas[i], erradas[i]); // alterando os arrays pela mesma posição.
        texto = recebeMensagem;
        b = false;
      }

    }

    if (b == false) {
      System.out.println(recebeMensagem);
    } else {
      System.out.println(texto);
    }

  }
}

Olá, Rodrigo.

Além da solução do Hiroshi, você pode tentar comparar as strings, fazendo com que elas fiquem minúsculas para a comparação.

            if (texto.toLowerCase().contains(certas[i].toLowerCase())) {                                 // verifico se a String TEXTO existe no array CERTAS.
                recebeMensagem = texto.replaceAll(certas[i].toLowerCase(), erradas[i].toLowerCase());     // alterando os arrays pela mesma posição.
                texto = recebeMensagem;
                b = false;
            }

Se achar que a leitura do código fica complicada, coloque as strings transformadas em novas variáveis.

            String textoMinusculo = texto.toLowerCase();
            String certaMinuscula = certas[i].toLowerCase();
            String erradaMinuscula = erradas[i].toLowerCase();

            if (textoMinusculo.contains(certaMinuscula)) {                                 // verifico se a String TEXTO existe no array CERTAS.
                recebeMensagem = texto.replaceAll(certaMinuscula, erradaMinuscula);     // alterando os arrays pela mesma posição.
                texto = recebeMensagem;
                b = false;
            }

Muito obrigado ao Hiroshi Farias Saito e Guilherme Ricci Gaiofatto as duas dicas solucionaram meu problema.