緊接上篇中的實現細節之一,文本正則替換(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)
- 注意全文匹配時,需去掉標准正則式中的 ^ 和 $ 標識符
- 本篇個網原文
- 博客園也會同步記錄!