Use String#replace()
en lugar de String#replaceAll()
, no necesita regex para el reemplazo de un solo carácter.
creé la siguiente clase para probar lo que es más rápido, darle una oportunidad:
public class NewClass {
static String s = "some_string with spaces _and underlines";
static int nbrTimes = 10000000;
public static void main(String... args) {
long start = new Date().getTime();
for (int i = 0; i < nbrTimes; i++)
doOne();
System.out.println("using replaceAll() twice: " + (new Date().getTime() - start));
long start2 = new Date().getTime();
for (int i = 0; i < nbrTimes; i++)
doTwo();
System.out.println("using replaceAll() once: " + (new Date().getTime() - start2));
long start3 = new Date().getTime();
for (int i = 0; i < nbrTimes; i++)
doThree();
System.out.println("using replace() twice: " + (new Date().getTime() - start3));
}
static void doOne() {
String new_s = s.toLowerCase().replaceAll(" ", "_").replaceAll(".", "_");
}
static void doTwo() {
String new_s2 = s.toLowerCase().replaceAll("[ .]", "_");
}
static void doThree() {
String new_s3 = s.toLowerCase().replace(" ", "_").replace(".", "_");
}
}
me sale el siguiente resultado:
usando replaceAll() dos veces: 100274
usando replaceAll() una vez: 24814
utilizando replace() dos veces: 31642
Por supuesto, no he perfilado la aplicación para el consumo de memoria, que podría haber dado resultados muy diferentes.
ah mi código ni siquiera funciona ... supongo que porque dice replaceAll utiliza expresiones regulares y por lo que el '' es un problema – ycomp