Si una cadena es a = 000102.45600. Necesito convertirlo a a = ---102.45600. ¿Alguna ayuda en Java usando regex o String formatter?

Intenté lo siguiente:

a = a.replaceFirst("^0+(?!$)","-");

Pero solo obtengo a = -102.45600 no 3 guiones.

Reglas: los ceros a la izquierda antes del decimal en la cadena deben reemplazarse por esa cantidad de guiones.

  1. 000023.45677 a ----23.45677

  2. 002345.56776 a --2345.56776

  3. 00000.45678 a -----.45678

Esperemos que tenga clara cuál es mi necesidad?

3
Rohan Meher 23 dic. 2016 a las 03:41

3 respuestas

La mejor respuesta
String subjectString = "000102.45600";
String resultString = subjectString.replaceAll("\\G0", "-");
System.out.println(resultString); // prints ---102.45600

\G actúa como \A (el ancla de inicio de cadena) en la primera iteración de replaceAll(), pero en pases posteriores ancla el partido en el lugar donde terminó el partido anterior. Eso evita que coincida con ceros en cualquier otro lugar de la cadena, como después del punto decimal.

Consulte: referencia SO respuesta.

5
Community 23 may. 2017 a las 11:53

Esto debería hacerlo:

String number = //assign a value here
    for (int i=number.length();i>0; i--) {
        if (number.substring(0,i).matches("^0+$")) {
            System.out.println(number.replaceAll("0","-"));
            break;
        }
    }

Esto busca la subcadena más larga de number que comienza en el índice 0 y consiste completamente en ceros, comenzando por verificar toda la Cadena y luego acortándola hasta encontrar la subcadena más larga de ceros a la izquierda. Una vez que encuentra esta subcadena, reemplaza cada cero con un guión y sale del bucle.

0
Bethany Louise 23 dic. 2016 a las 01:03

¿Por qué no convertir el inicio de la cadena al "." a un entero, conviértalo de nuevo a una cadena y luego compare las longitudes. 000102 longitud = 6. 102 longitud = 3. Tendría su recuento cero anterior.

-2
older coder 23 dic. 2016 a las 00:56