項目里面 需要對已手機號碼進行 如下的顯示
比如15088688388 要顯示為150****8388的效果
實現這個簡單的效果 方法有很多
我想試試用正則表達式去實現
查了點資料最終試出來以下方法可行
System.out.println("15088688388".replaceAll("(\\d{3})(\\d{4})","$1****"));
輸出結果:150****8388
首先對replaceAll方法的第一個參數進行解釋
第一個參數指定了需要替換的地方
(\\d{3})表示"15088688388" 這個字串的前3位,即"150",視為第1組,跟第二個參數的$1相對應,(\\d{4})則表示跟在前三位之后的4位,即"8868",視為第2組。
當然(\\d{3}),也可以寫成(150) 這種子串,,(\\d{4})可以寫成(8868),所以最終也可以寫成這樣System.out.println("15088688388".replaceAll("(150)(8868)","$1****"));
replaceAll方法的第二個參數表示對需要替換的地方怎么個替換法
在第二個參數的"$1****"中,$1表示第一個參數中的第1組,即(\\d{3}),也即"150"。"****"是追加在"150"后面,"$1****"表示"150****"。同樣,如果第二個參數里面出現$2,就表示第一個參數的第二組,就是(\\d{4}),即"8868"。
需要注意的是,如果第一個參數定義了幾個組,第二個參數中沒出現相對應的分組$,那就是去掉的意思。上面那個例子中,$2沒出現,相當於replace.("8868", "")的作用。
還有$0表示整個字符串的意思,即第一個參數的所有分組組成的字串,上述例子的(\\d{3})(\\d{4}),即"1508868"。
再舉例一個
String str = "012345678231206546123";
System.out.println(str.replaceAll("(123)(45678)", "$1.jsp"));
打印出的結果是:
0123.jsp231206546123