紧接上篇中的实现细节之一,文本正则替换(for 掩码脱敏)
Code
public static String maskReplaceAllWithPattern(String str, BaseMasker masker) {
if(StrUtil.isBlank(str) || null==masker.pattern()) {
return str;
}
Matcher matcher = masker.pattern().matcher(str);
boolean find = matcher.find();
if(!find) {
return str;
}
// 写法1
// int start = 0; //关键
// StringBuilder sb = new StringBuilder();
// do {
// //System.out.println("match " + masker.maskType().name());
// // append before
// sb.append(str, start, matcher.start());
// // append replacement
// sb.append(masker.mask(matcher.group()));
// // loop
// start = matcher.end();
// find = matcher.find();
// } while (find);
// // append tail
// if (start < str.length()) {
// sb.append(str, start, str.length());
// }
// 写法2
StringBuffer sb = new StringBuffer();
do {
// System.out.println("match masker:" + masker.maskType().name());
// append replacement
matcher.appendReplacement(sb, masker.mask(matcher.group()));
// loop
find = matcher.find();
} while (find);
// append tail
matcher.appendTail(sb);
sb.append("_").append(masker.maskType().name());
return sb.toString();
}
说明
- 主要是 Java 中 Patern 和 Matcher 的用法(matcher、find、group)
- 注意全文匹配时,需去掉标准正则式中的 ^ 和 $ 标识符
- 本篇个网原文
- 博客园也会同步记录!