java - una - Cadena: ¿cómo reemplazar múltiples caracteres posibles con un solo carácter?
reemplazar caracter especial java (3)
Use String#replace()
lugar de String#replaceAll()
, no necesita expresiones regulares para el reemplazo de un solo carácter.
Creé la siguiente clase para probar lo que es más rápido, pruébalo:
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(".", "_");
}
}
Obtengo el siguiente resultado:
usando replaceAll () dos veces: 100274
utilizando replaceAll () una vez: 24814
usando 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.
Me gustaría reemplazar todo ''.''
y '' ''
con un ''_''
pero no me gusta mi código ...
¿Hay una manera más eficiente de hacer esto que:
String new_s = s.toLowerCase().replaceAll(" ", "_").replaceAll(".","_");
?
toLowerCase () simplemente porque también lo quiero más bajo ...
s.replaceAll("[//s//.]", "_")
String new_s = s.toLowerCase().replaceAll("[ .]", "_");
EDITAR:
replaceAll
está utilizando expresiones regulares y usando .
dentro de una clase de personaje [ ]
simplemente reconoce a .
en lugar de cualquier personaje.