regex replace all ignora el caso

¿Cómo ignoro caso en el siguiente ejemplo?

outText = inText.replaceAll(word, word.replaceAll(" ", "~")); 

Ejemplo:

Entrada:

 inText = "Retail banking Wikipedia, the free encyclopedia Retail banking " + "From Wikipedia. retail banking industry." word = "retail banking" 

Salida

 outText = "Retail~banking Wikipedia, the free encyclopedia Retail~banking " + "From Wikipedia. retail~banking industry." 

Para hacer una búsqueda y reemplazo insensible a mayúsculas y minúsculas, puede cambiar

 outText = inText.replaceAll(word, word.replaceAll(" ", "~")); 

dentro

 outText = inText.replaceAll("(?i)" + word, word.replaceAll(" ", "~")); 

Evite arruinar la capitalización original:

Sin embargo, en el enfoque anterior, está arruinando la capitalización de la palabra reemplazada. Aquí hay una mejor sugerencia:

 String inText="Sony Ericsson is a leading company in mobile. " + "The company sony ericsson was found in oct 2001"; String word = "sony ericsson"; Pattern p = Pattern.compile(word, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(inText); StringBuffer sb = new StringBuffer(); while (m.find()) { String replacement = m.group().replace(' ', '~'); m.appendReplacement(sb, Matcher.quoteReplacement(replacement)); } m.appendTail(sb); String outText = sb.toString(); System.out.println(outText); 

Salida:

 Sony~Ericsson is a leading company in mobile. The company sony~ericsson was found in oct 2001 

Podrías convertirlo todo en minúsculas antes de hacer la búsqueda, o ver un modificador de expresiones regulares Pattern.CASE_INSENSITIVE

Esta es mi forma de hacerlo:

  private String replaceAllIgnoreCase(final String text, final String search, final String replacement){ if(search.equals(replacement)) return text; final StringBuffer buffer = new StringBuffer(text); final String lowerSearch = search.toLowerCase(Locale.CANADA); int i = 0; int prev = 0; while((i = buffer.toString().toLowerCase(Locale.CANADA).indexOf(lowerSearch, prev)) > -1){ buffer.replace(i, i+search.length(), replacement); prev = i+replacement.length(); } return buffer.toString(); } 

Parece funcionar perfectamente hasta mi punto. Lo bueno de hacerlo a mi manera es que no hay expresiones regulares en mi solución, lo que significa que si quisieras reemplazar un corchete o un signo más (o cualquier otro metacarácter), en realidad reemplazará el texto por lo que realmente es es, en lugar de lo que significa en expresiones regulares. Espero que esto haya ayudado.

No especificaste un idioma.

Java tiene Pattern.CASE_INSENSITIVE

C # y VB tienen RegexOptions.IgnoreCase