Usando o método replace(CharSequence target, CharSequence replacement)
em String, como posso tornar o destino sem distinção entre maiúsculas e minúsculas?
Por exemplo, a maneira como funciona agora:
String target = "FooBar";
target.replace("Foo", "") // would return "Bar"
String target = "fooBar";
target.replace("Foo", "") // would return "fooBar"
Como fazê-lo substituir (ou se houver um método mais adequado) não diferencia maiúsculas de minúsculas, de modo que ambos os exemplos retornem "Bar"?
target.replaceAll("(?i)"+Pattern.quote("foo"), "");
Se você não se importa com o caso, talvez não importe se ele retorna tudo em ordem:
fonte
Talvez não seja tão elegante quanto outras abordagens, mas é bastante sólido e fácil de seguir, especialmente. para pessoas mais novas em Java. Uma coisa que me impressiona sobre a classe String é a seguinte: ela existe há muito tempo e, embora ofereça suporte a uma substituição global por regexp e uma substituição global por Strings (via CharSequences), essa última não possui um parâmetro booleano simples : 'isCaseInsensitive'. Realmente, você pensaria que, apenas adicionando esse pequeno interruptor, todos os problemas que sua ausência causa para iniciantes, em especial, poderiam ter sido evitados. Agora no JDK 7, o String ainda não suporta esta pequena adição!
Bem, de qualquer maneira, vou parar de me segurar. Para todos, especialmente os mais novos em Java, aqui está o seu deus ex machina recortar e colar . Como eu disse, não é tão elegante e não ganha nenhum prêmio de codificação, mas funciona e é confiável. Quaisquer comentários, fique à vontade para contribuir. (Sim, eu sei, o StringBuffer é provavelmente a melhor escolha para gerenciar as duas linhas de mutação da cadeia de caracteres, mas é fácil o suficiente trocar as técnicas.)
fonte
Expressões regulares são bastante complexas de gerenciar devido ao fato de alguns caracteres serem reservados: por exemplo,
"foo.bar".replaceAll(".")
produz uma sequência vazia, porque o ponto significa "qualquer coisa". Se você deseja substituir, apenas o ponto deve ser indicado como parâmetro"\\."
.Uma solução mais simples é usar objetos StringBuilder para pesquisar e substituir texto. São necessários dois: um que contém o texto na versão em minúsculas enquanto o segundo contém a versão original. A pesquisa é realizada no conteúdo em minúsculas e o índice detectado também substituirá o texto original.
fonte
Para caracteres não Unicode:
fonte
org.apache.commons.lang3.StringUtils:
public static String replaceIgnoreCase (Texto da string, String searchString, Substituição da string)
O caso insensivelmente substitui todas as ocorrências de uma String dentro de outra String.
fonte
Eu gosto da resposta de smas que usa com uma expressão regular. Se você fará a mesma substituição várias vezes, faz sentido pré-compilar a expressão regular uma vez:
replaceAll
fonte
Simplesmente simplifique sem bibliotecas de terceiros:
fonte