Me gusta reemplazar cierto conjunto de caracteres de una cadena con un carácter de reemplazo correspondiente de una manera eficiente.Cómo reemplazar caracteres en una cadena java?
Por ejemplo:
String sourceCharacters = "šđćčŠĐĆČžŽ";
String targetCharacters = "sdccSDCCzZ";
String result = replaceChars("Gračišće", sourceCharacters , targetCharacters);
Assert.equals(result,"Gracisce") == true;
es que hay manera más eficiente que usar el método de la clase String replaceAll
?
Mi primera idea era:
final String s = "Gračišće";
String sourceCharacters = "šđćčŠĐĆČžŽ";
String targetCharacters = "sdccSDCCzZ";
// preparation
final char[] sourceString = s.toCharArray();
final char result[] = new char[sourceString.length];
final char[] targetCharactersArray = targetCharacters.toCharArray();
// main work
for(int i=0,l=sourceString.length;i<l;++i)
{
final int pos = sourceCharacters.indexOf(sourceString[i]);
result[i] = pos!=-1 ? targetCharactersArray[pos] : sourceString[i];
}
// result
String resultString = new String(result);
¿Alguna idea?
Por cierto, los caracteres UTF-8 están causando el problema, con US_ASCII funciona bien.
con esta solución me sale: GraA? IA¡Ae. y, por cierto, me gustaría reemplazar no solo los caracteres diacríticos sino también otros de otros idiomas. entonces realmente me gustaría saber una solución que funcione para un mapeo arbitrario. – ManBugra
Exactamente. El problema es que los signos diacríticos a veces se combinan, a veces no, y el reemplazo cadena por carácter se confunde porque en realidad hay dos personajes, no uno. –
@Mr. Brillante y nuevo: sí, System.out.println ("š" .toCharArray(). Length); salidas '2' – ManBugra