1.1需求
在实际开发中,前后端分离开发需要对参数加密或者脱敏的需求日益增多,今天接到的需求就是对用户信息的地址在返回前端的时候需要对 其做处理,需求如下:
就是将地址字符中的汉字的后6个进行脱敏。
1.2 工具类
//需要导入的包
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public static String addrEnc(String tarStr){
try {
if(tarStr!=null){
if(tarStr.length()>6){
// String tarStr = "陕西省西安市雁塔区科技南路FTTH亿龙金河湾岳府郡(二区)1号楼3单元";
//因为是后六位汉字,所以将地址先倒置
String s=new StringBuilder(tarStr).reverse().toString();
System.out.println(s);
//正则规则(汉字)
String regEx="[\u4e00-\u9fa5]";
//进行正则匹配,获取汉字的位置
Matcher slashMatcher = Pattern.compile(regEx).matcher(s);
int mIdx = 0;
//如果到汉字则记录下下标
while(slashMatcher.find()) {
mIdx++;
//脱敏第6位汉字
int N=6;
if(mIdx == N){
break;
}
}
//slashMatcher.start()+1就是第6个汉字的下标,从总的字符串截取下来
String s1 = s.substring(0,slashMatcher.start()+1);
// String s2= s1.replaceAll(regEx,"*");
//将带有最后6位汉字的字符串用* 替换再和剩下的字符串拼接。
String s3= s1.replaceAll(regEx,"*")+s.substring(slashMatcher.start()+1,s.length());
//最后将处理好的字符串倒置。
tarStr=new StringBuilder(s3).reverse().toString();
//这里的tarStr就是我们最终处理后的数据
System.out.println(tarStr);
}
}
} catch (Exception e) {
//脱敏失败不做处理
}
return tarStr!=null?tarStr:"";
}
1.3 应用展示
仅作记录。如有更好的方法望指正。