Aunque se puede utilizar una expresión regular, a veces es mejor dar un paso atrás y solo hazlo a la vieja usanza. Siempre he creído que, si no se puede pensar en una expresión regular para hacerlo en unos dos minutos, probablemente no sea adecuada para una solución de expresiones regulares.
Sin duda, obtenga algunas respuestas regex maravillosas aquí. Algunos de ellos incluso pueden ser legible :-)
Puede utilizar lastIndexOf
para conseguir la última ocurrencia y substring
para construir una nueva cadena: Este completo programa muestra cómo:
public class testprog {
public static String morph (String s) {
int pos = s.lastIndexOf(".");
if (pos >= 0)
return s.substring(0,pos) + "!" + s.substring(pos+1);
return s;
}
public static void main(String args[]) {
System.out.println (morph("hello.world.how.are.you!"));
System.out.println (morph("no dots in here"));
System.out.println (morph(". first"));
System.out.println (morph("last ."));
}
}
la salida es:
hello.world.how.are!you!
no dots in here
! first
last !
Muchas gracias! Nunca hubiera llegado con ese monstruo. – digiarnie
El hecho de que sea un monstruo (sus palabras, no las mías) es probablemente un buen argumento para _no_ usarlo :-) Aún así, si funciona, debe aceptarse ya que pidió una solución de expresiones regulares. – paxdiablo
Estoy de acuerdo con eso. – digiarnie