String value
= "abcd12345678910";
value
.replaceAll("(\\d{3})(\\d{4})","$1****");
输出abcd123
****8910
\\d
{3}为第一部分,d代表数字,所以前三个数字替换成$
1,
第二个参数的$
1代表第一部分,所以前三位
123没有变,或者说是变成了他自己
第二部分的四个数字 ,即
4567 变成了右边的
****
剩下的不做替换,拼接在了后面
预定义字符类 . 任何字符(与行结束符可能匹配也可能不匹配) /d 数字:[0-9] /D 非数字: [^0-9] /s 空白字符:[ /t/n/x0B/f/r] /S 非空白字符:[^/s] /w 单词字符:[a-zA-Z_0-9] /W 非单词字符:[^/w]
value
.replaceAll("(\\w{3})(\\d{3})(\\d{4})(\\d{4})","HHHH$2****$4");
输出aHHHH123
****8910;
\\w
{3} w代表单词字符,所以是最右边的三位单词字符替换成HHHH,即bcd换成了HHHH
\\d
{3} d代表数字,所以是前三位数字,
123 第一个参数的第二部分 $
2 替换自己本身,即
123
\\d
{4} 第三部分 替换成
****
\\d
{4} 第四部分 替换自己
replace不支持正则表达式 正则表达式: https://blog.csdn.net/demon7552003/article/details/94884761