Java, Replace minus sign at last of the string with regex

Para realizar busquedas en cadenas de texto generalmente se recomienda utilizar expresiones regulares (mejor conocido como “regex”) y bueno esta ocasión necesitaba encontrar el último caracter con simbolo negativo en una cadena y moverlo al principio del texto.

Esta operación que puede sonar algo trivial puede dar algunos dolores de cabeza, ya que puedes tener varios escenarios que a veces no contemplamos, por ejemplo supongamos que tenemos los siguientes valores:

  • “1000-“
  • “200.00 -“
  • “300.oo -“
  • “40 –         “
  • “50-          -“
  • “60.    —- “

Notese los espacios en blanco, en fin así podria generar muchos casos y pero siempre es bueno imaginar el más absurdo de todos. Para localizar cual es el último simbolo negativo,  la primera idea como developers es buscar por posiciones y esto nos lleva a codificar locuras… (como casi siempre dejamos todo cierto? :p)  así que la forma adecuada de hacerlo es con “regex”.

Aquí dejo cargado el método de una prueba con JUnit que he utilizado para un mapeo en SAP PI.

    /**
     * Replace minus sign and put at the begin of the String
     * @param strValue
     * @return move minus sign at the begin of the String, if not match return original String value
     */
    public String removeMinus(String strValue){

        String pattern="\\-\\s*$";

        Pattern p= Pattern.compile(pattern);
        Matcher m= p.matcher(strValue);

        if(m.find()){
            return"-"+m.replaceFirst(" ");
        }else{
            return strValue;
        }
    }

Creo que el código se explica por si solo y la versión completa pueden verla en mi cuenta de Gist.

Es muy sencillo y puede mejorarse para incrementar el performance pero esto ejemplifica bastante bien lo que necesitaba.

Y claro la hermosa documentación que me ayudo a generarlo.

Saludos!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s