El manejo de cadenas en Java es algo que trato de aprender a hacer bien. Actualmente quiero tomar una cadena y reemplazar cualquier personaje que encuentre.¿Cuál es una forma eficiente de reemplazar muchos caracteres en una cadena?
Aquí está mi función actual ineficiente (y algo tonta IMO). Fue escrito para solo trabajar.
public String convertWord(String word)
{
return word.toLowerCase().replace('á', 'a')
.replace('é', 'e')
.replace('í', 'i')
.replace('ú', 'u')
.replace('ý', 'y')
.replace('ð', 'd')
.replace('ó', 'o')
.replace('ö', 'o')
.replaceAll("[-]", "")
.replaceAll("[.]", "")
.replaceAll("[/]", "")
.replaceAll("[æ]", "ae")
.replaceAll("[þ]", "th");
}
me corrieron 1.000.000 carreras de la misma y se tomaron 8182ms. Entonces, ¿cómo debo proceder para cambiar esta función y hacerla más eficiente?
Solución encontrado:
la conversión de la función a esta
public String convertWord(String word)
{
StringBuilder sb = new StringBuilder();
char[] charArr = word.toLowerCase().toCharArray();
for(int i = 0; i < charArr.length; i++)
{
// Single character case
if(charArr[i] == 'á')
{
sb.append('a');
}
// Char to two characters
else if(charArr[i] == 'þ')
{
sb.append("th");
}
// Remove
else if(charArr[i] == '-')
{
}
// Base case
else
{
sb.append(word.charAt(i));
}
}
return sb.toString();
}
La ejecución de esta función de 1.000.000 veces tarda 518ms. Entonces creo que eso es lo suficientemente eficiente. Gracias por la ayuda chicos :)
* * Algunos del trabajo está aquí: http://stackoverflow.com/questions/1008802/converting-symbols-accent-letters-to-english-alphabet. No sé sobre 'æ' y' þ'. – Kobi