这段时间一直在做数据脱敏有关的事情,其中遇到一个问题就是ip需要脱敏,我一开始想了很多办法,包括String字符串的分段功能,后面发现还是有缺陷,缺陷在于识别方面我是根据位数划分,那么会遇到不是ip,但是.这个就很有可能也会被识别就会产生误判,所以后面经过我学委的指导,用上了正则表达式,从一串字符串中去识别出ip的内容,并且提取出来,提取出来后再对ip进行处理,反正我以为我成功解决了这一问题........哈哈哈,我以为的总是我以为的,我发现给到的内容进行了加密,我没有办法把一段内容全部复制,我甚至怀疑是String不允许那么长的内容改成了StringBuffer,后面才发现不是的,就是表格不支持复制那么多内容,所以我也没办法. 我一开始面对这样的大量的需要脱敏的数据,我的想法是绝对不能这么一个一个去改,那不知道要改到什么时候,于是想试试以文件流加载进,后面再批量自动脱敏后导出,这个思路是没有什么问题的,但是文件加密,连复制内容都是有限制的,不要问我为什么不解锁,因为公司给资料是有密码加密的,利用手段解密之后我如何还原文件?还是盲区,或许今后会遇见吧.
先来记录一下这个ip脱敏的工具类吧
package com.jcx;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author jcx
* @description
* @createTime 2022/3/4 8:57
*/
public class GetIp {
/**
* 正则提前字符串中的IP地址
* @param ipString
* @return
*/
public static String getIps(String ipString){
String regEx="((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)";
List<String> ips = new ArrayList<String>();
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(ipString);
String replace=null;
while (m.find()) {
String result = m.group();
String string = getString(result);
replace = ipString.replace(result, string);
}
return replace;
}
public static String getString(String c){
String[] split = c.split("\\.");
StringBuffer c2=new StringBuffer();
c2.append(split[0]+".");
for (int i = 0 ; i < split.length; i++) {
if (i%3==1 && i!=0){
c2.append("**.");
}
if (i%3==2 && i!=0){
c2.append("***.");
}
if (i%3==0 && i!=0){
c2.append(split[i]+".");
}
}
String s = c2.toString();
return s.substring(0,s.length()-1);
}
public static void main(String[] args) {
StringBuffer stringBuffer=new StringBuffer();
System.out.println(getIps(stringBuffer.toString()));
String ipString="1,LB206_HDS4080_AP_001分配1T空间给172.18.30.24172.18.30.132172.18.30.89172.18.68.205172.18.68.20610.21.206.702,CAF4_HDS4080_AP_001\n" +
"分配1T空间给172.16.37.212172.16.37.78172.16.37.201172.16.33.68172.16.33.69172."+"onepluscorp.cn"+"IN{typeforward;forwardonly;forwarders{10.21.193.76;10.21.193.77;};};zone"+"oneplu";
System.out.println(getString(ipString));
System.out.println(getIps(ipString));
}
}
今后遇到就会可以直接用了
再就是你问我怎么解决这个问题的,,,,,,我确实不太可能一个一个改,我最后百度到一个方法,要是你们也遇到可以借鉴一下.
*. 查找以.结尾
***. 把查找到的替换成这个
=A3&";"&B3&"';"&C3&"';"&C3 针对需要拆分内容后需要合并的函数
=RIGHT(J2,10) 截取某个单元格的内容的一部分(针对只要某一部分)
=LEFT(K2,1)&"**"&LEFT(K2,3)&"****"&RIGHT(K2,3) 截取某个单元格的内容的一部分(针对要前后部分)
=LEFT(K2,2)&"****"&RIGHT(K2,2) 截取某个单元格的内容的一部分(针对要前后部分)
=LEFT(K2,1)&"*"&RIGHT(K2,1) 截取某个单元格的内容的一部分(针对要前后部分)
哈哈,还有一个必杀技,就是批量填录,点击写好的单元格,出现加号,双击,就会自动填充到最后