2012-03-20 14 views
16

He estado leyendo a través de regex y pensé que esto funcionaría pero no parece querer funcionar. Todo lo que tengo que hacer es quitarle el 1 a un número de teléfono, si existe.Reemplazo simple de Groovy usando regex

Así:

def mphone = 1+555-555-5555 
mphone.replace(/^1/, "") 

En caso de que no esta salida + 555-555-5555?

+0

Quiere decir 'def mphone =" 1 + 555-555-5555 "' (con comillas) – Antoine

Respuesta

26

Reconozco dos errores en su código. El primero es probablemente un error: no se que rodea el número de teléfono con comillas, así que es un entero: 1 + 555 - 555 - 5555 = -5554

Además, se debe utilizar replaceFirst ya que no hay ningún método replace en Cadena de tomar un patrón como primer parámetro. Esto funciona:

def mphone = "1+555-555-5555" 
mphone.replaceFirst(/^1/, "") 
+15

Buena respuesta. Una advertencia, no olvides que las cadenas son inmutables. Asegúrese de volver a asignar mphone: 'mphone = mphone.replaceFirst (/^1 /," ")' –

+0

@Joathathon gran comentario, usando la última línea como valor de retorno haría pero no creo que también podría ser un error * en el lugar * reemplazo – Esteban

+0

¡Hecho @ChrLipp, gracias por informarme! – Esteban

17

replace es un método Java de cadena de Java, que sustituyen a un personaje con otro:

assert "1+555-551-5551".replace('1', ' ') == " +555-55 -555 " 

Lo que se busca es replaceAll, que sustituiría a todas las apariciones de una expresión regular, o replaceFirst, que reemplazaría sólo la primera aparición:

assert "1+555-551-5551".replaceAll(/1/, "") == "+555-55-555" 
assert "1+555-551-5551".replaceFirst(/1/, "") == "+555-551-5551" 

el ^ en su expresión regular significa t sombrero de la que debe estar al principio:

assert "1+555-551-5551".replaceAll(/^1/, "") == "+555-551-5551" 

por lo que el código que envió era casi correcto.

Cuestiones relacionadas