脱敏字符串中的数字部分
import java.util.ArrayList;
public class NumberCollector {
public static void main(String[] args) {
String charList = "123456789人的法国人的12345678的法国队12345678901天热发给他提供123456789012fhhtf12345678901234";
String integer = ""; //作为数字字符串的预备区
String str = ""; //作为非数字字符串的预备区
ArrayList<String> numList = new ArrayList<>();
for (int i = 0; i < charList.length(); i++) {
if (!Character.isDigit(charList.charAt(i))) {
str += charList.charAt(i);
//避免字符串最后一位为非数字而遗漏收集的情况
if (i == charList.length() - 1) {
numList.add(str);
}
}else if (!str.isEmpty()) { //读取到数字字符,并且检查预备区是否为空
numList.add(str);
str = "";
}
//遍历字符串中每个字符时,若该字符为数字字符,则存入预备区
if (Character.isDigit(charList.charAt(i))) {
integer += charList.charAt(i);
//避免字符串最后一位为数字而遗漏收集的情况
if (i == charList.length() - 1) {
numList.add(integer);
}
}else if (!integer.isEmpty()) { //读取到非数字字符,并且检查预备区是否为空
numList.add(integer);
integer = "";
}
}
String outStr = "";
//输出收集到的数据
for (String each : numList) {
//数据脱敏规则
if(each.length()==11){
StringBuilder sb = new StringBuilder(each);
String eachbak = sb.replace(3,8,"*****").toString();
each=eachbak;
}else if(each.length()==8){
StringBuilder sb = new StringBuilder(each);
String eachbak = sb.replace(3,5,"**").toString();
each=eachbak;
}
outStr+=each;
}
System.out.println(outStr);
}
}