2012-03-20 13 views
16

Ho letto la regex e ho pensato che funzionasse, ma non sembra voler funzionare. Tutto quello che devo fare è togliere il numero 1 dal numero di telefono, se esiste.Simple Groovy sostituisci usando regex

Quindi:

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

Non dovrebbe questa uscita + 555-555-5555?

+0

Intendevi 'def mphone =" 1 + 555-555-5555 "' (con virgolette) – Antoine

risposta

26

Riconosco due errori nel codice. In primo luogo è probabilmente un errore di battitura: non si circonda il numero di telefono con le virgolette in modo che sia un numero intero: 1 + 555-555 - 5555 = -5554

Inoltre, si dovrebbe usare replaceFirst poiché non c'è nessun metodo replace in String prendere un Pattern come primo parametro. Questo funziona:

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

Buona risposta. Un avvertimento, non dimenticare che le stringhe sono immutabili. Assicurati di riassegnare mphone: 'mphone = mphone.replaceFirst (/^1 /," ")' –

+0

@Johnathon ottimo commento, usando l'ultima riga come un valore di ritorno farebbe ma non pensavo che potesse essere anche un errore * sostituzione sul posto * – Esteban

+0

Fatto @ChrLipp, grazie per avermelo fatto notare! – Esteban

17

replace è un metodo Java di String di Java, che sostituiscono un personaggio con un altro:

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

Quello che state cercando è replaceAll, che dovrebbe sostituire tutte le occorrenze di una regex, o replaceFirst, che dovrebbe sostituire la prima occorrenza unica:

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

il ^ nella vostra regex significa t quello che deve essere all'inizio:

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

quindi il codice che hai postato era quasi corretto.