我在用replace方法替换身份证的中间几位,
String uAccount = userAccount.replace(userAccount.substring(6, 14), "********");
这样的方法当身份证号码是622222222222222222这样的时候,替换出来成6****************2这样了,难道不应该是622222********2222的吗,但是如果身份证号码没有重复这么多的话它出来是合适的,比如622420********1478这样,这是为什么呢,求大神指点!
StringBuilder sb = new StringBuilder(userAccount);
sb.replace(6, 14, "********");
userAccount=sb.toString();
一般都是substring()出来一段 去替换 如果还是担心有重复的话 可以tochararray()之后重新拼接把指定的位拼成* 就ok了
因为你截取的第7到15位之间的字符串就是“22222222”。是8个2,那么,你给的字符串中恰巧有17个连续的2,其中有两个连续的“22222222”,然后剩下一个2了。明白了没?
你通过userAccount.substring(6, 14), 截取出来是“22222222”,替换的时候当然就把所有的匹配项都替换掉了。你可以使用截取再拼接的方法。
userAccount.substring(6, 14) 你截取的得到的是 222222, 替换的时候是拿你截取的222222这串字符串进行匹配, 所有替换后就会是6****1278了,
你可以先截取0-6的缓存起来 然后截取14-end的缓存,再进行替换
String str1 =userAccount.substring(0, 6) ;
String str2 =userAccount.substring(14, userAccount.length()) ;
String result = str1 + "******"+str2;
userAccount.substring(0,6)+"********"+userAccount.substring(userAccount.length()-4,userAccount.length());
public static void main(String[] args) {
String id = "110110199001011010";
System.out.println(id.length());
String substring = id.substring(6,14);
System.out.println(substring);
String replace = id.replace(substring, "********");
System.out.println(replace);
char[] charArray = id.toCharArray();
String newid = "";
for (int i = 0; i < charArray.length; i++) {
if (i <= 5 || i >= 14) {
newid += charArray[i];
}else {
newid += "*";
}
}
System.out.println(newid);
}
String uAccount = userAccount.substring(0, 6) + "********" + userAccount.substring(14);
是你的写法有问题,String uAccount = userAccount.replace(, "********") 相当于String uAccount = userAccoun.replace
("22222222","********")。 userAccount.substring(6, 14)这个是单独计算出来的,跟外面层的 userAccount已经没关系了。
统一回复:感谢大家 解决了 非常感谢 渌江小鲤鱼 和 weixin_316529 ,两个方法都没问题,因为weixin_316529 他的改动较少,采纳了 再次感谢!!!
而且replace就是一个全局匹配的方法,不能按你那种写法来写,只能用substring的方式进行截取拼接。
楼主的意图因为是想着前后各四位不匹配,不管身份证多少位?如果是这样的话,请使用正则表达式
replace是方法是全部匹配的方法,只要满足,就会匹配修改的,一个数字,可能对多次满足这个匹配的条件
js: "1234afafasdas4321".replace(/^([\d]{4,4}).*?([\d]{4,4})$/g,'$1****$2')
java:
String a = "1234afafasdas4321";
a.replace("^([\\d]{4,4}).*?([\\d]{4,4})$" ,"$1***$2");