名称脱敏
要求:姓名脱敏
1)2个字姓名的名做脱敏,比如张三,显示为张*
2)3个字姓名的第2个名做脱敏,比如张立三,显示为张*三
3)超过4个字姓名的前2位和最后1位不变,中间字符全部脱敏,比如慕容张三,显示为慕容*三
代码:
package com.zc.feature; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.test.context.junit4.SpringRunner; import java.util.Objects; @RunWith(SpringRunner.class) public class NameTest { @Test void test1() { String name = "张三"; System.out.println(nameForDesensitization(name)); name = "张三四"; System.out.println(nameForDesensitization(name)); name = "张三四五"; System.out.println(nameForDesensitization(name)); name = "张三四五六"; System.out.println(nameForDesensitization(name)); name = "张三四五六七八"; System.out.println(nameForDesensitization(name)); } /** * 名字脱敏 * @param name 名称 * @return */ private static String nameForDesensitization(String name) { String resultStr = ""; if (Objects.isNull(name) || name.length() < 2) { return name; } else if(name.length() == 2) { resultStr += name.substring(0, 1)+"*"; }else if(name.length() == 3) { resultStr += name.substring(0, 1)+"*"+name.substring(2); }else if(name.length() >=4) { resultStr += name.substring(0, 2); resultStr +=repeat("*",name.length() -3); resultStr += name.substring(name.length()-1); } return resultStr; } /** * 输出指定个数的字符 * @param c 特定字符 * @param length 输出字符个数 * @return */ private static String repeat(String c, int length) { String rep = ""; for (int i = 0; i < length; i++) { rep += c; } return rep; } }