java开发小工具
记录一下Java常用的但没有工具包直接使用的工具类,持续更新中欢迎讨论。
字符串脱敏处理
对于某些字符串例如身份证、手机电话等需要脱敏展示,下面介绍4种方式。
@Test
void test() {
String testStr = "154565465654661";
String STAR_STR = "*";
int desensitiseLength = 6;
// 1.利用StringBuilder的replace
long start = System.nanoTime();
if (testStr.length() > desensitiseLength) {
int midLength = testStr.length() / 2;
StringBuilder sb = new StringBuilder(testStr);
sb.replace(midLength - desensitiseLength / 2, midLength + desensitiseLength / 2,
String.join("", Collections.nCopies(desensitiseLength, STAR_STR)));
log.info("修改后的字符串:{},耗时:{} ns", sb.toString(), System.nanoTime() - start);
}
// 2.利用工具类 StringUtils
String testStr2 = "154565465654661";
if (testStr2.length() > desensitiseLength) {
int startIndex = (testStr2.length() - desensitiseLength) / 2 + 1;
testStr2 = StringUtils.left(testStr2, startIndex).
concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(testStr2, startIndex),
StringUtils.length(testStr2), "*"), "******"));
log.info("修改后的字符串:{},耗时:{} ns", testStr2, System.nanoTime() - start);
}
// 3.利用正则
long start3 = System.nanoTime();
String testStr3 = "154565465654661";
if (testStr3.length() > desensitiseLength) {
int startIndex = (testStr2.length() - desensitiseLength) / 2;
int endIndex = testStr3.length() - startIndex - desensitiseLength;
testStr3 = testStr3.replaceAll("(\\w{" + startIndex + "})(\\w+)(\\w{" + endIndex + "})", "$1******$2");
log.info("修改后的字符串:{},耗时:{} ns", testStr3, System.nanoTime() - start3);
}
// 4.直接用subString方法
long start4 = System.nanoTime();
String testStr4 = "154565465654661";
if (testStr4.length() > desensitiseLength) {
int startIndex = (testStr2.length() - desensitiseLength) / 2;
int endIndex = (testStr2.length() + desensitiseLength) / 2;
testStr4 = testStr4.substring(0, startIndex) + "******" + testStr4.substring(endIndex);
log.info("修改后的字符串:{},耗时:{} ns", testStr4, System.nanoTime() - start4);
}
}
结果如下,可以看出按照耗时和性能比较,推荐使用第四种方式,方便快捷
修改后的字符串:1545******54661,耗时:316500 ns
修改后的字符串:15456****54661,耗时:5414600 ns
修改后的字符串:1545******654656,耗时:231200 ns
修改后的字符串:1545******54661,耗时:37700 ns