2012-03-20 19 views
16

私はregexを通して読んできましたが、これはうまくいくと思っていましたが、うまくいきません。私がする必要があるのは、電話番号が存在する場合は先頭の1を取り除くことだけです。だから、シンプルなGroovyはregexを使って置き換えます

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

この出力+ 555-555-5555べきではないのですか?

+0

あなたは 'def mphone =" 1 + 555-555-5555 "'(引用符付き)を意味しました – Antoine

答えて

26

私はあなたのコードで2つのエラーを認識しています。まず一つは、おそらくタイプミスです:それは整数ですので、あなたが引用符で電話番号を取り巻くされていません:1 + 555から555 - 何の方法replaceありませんので、また= -5554

5555、あなたが取って文字列にreplaceFirstを使用する必要があります第1のパラメータとしてのパターン。これは動作します:

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

いい答えです。 1つの注意点、忘れないでくださいストリングは不変です。 mphoneを再割り当てするようにしてください: 'mphone = mphone.replaceFirst(/^1 /、" ") –

+0

@Johnathon素晴らしいコメント、最後の行を戻り値として使用しますが、間違っているとは思わなかった*インプレース*交換 – Esteban

+0

完了@ChrLipp、私に知らせてくれてありがとう! – Esteban

17

replaceは別の文字置き換えJavaの文字列のJavaメソッド、次のとおりです。

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

あなたがreplaceAllで探しているものを、正規表現の出現をすべて置き換えます、

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

はあなたの正規表現で^はトンを意味しますかreplaceFirst、それは最初の発生を置き換えます帽子は最初になければなりません。

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

あなたが投稿したコードはほぼ正しいものでした。

関連する問題