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