因业务需求接口需要对返回银行卡保留首6位,尾4位,中间以星号代替。本着不重复造轮子原则,上网找了几种写法,测试后感觉写法效率不高,于是自己写了一遍,用字符数组按位替换。
代码如下:
/**
* 对字符加星号处理:除前面几位和后面几位外,其他的字符以星号代替
*
* @param content
* 传入的字符串
* @param frontNum
* 保留前面字符的位数
* @param endNum
* 保留后面字符的位数
* @return 带星号的字符串
*/
public static String replaceString2Star(String content, int frontNum, int endNum) {
if (content == null || content.trim().isEmpty())
return content;
int len = content.length();
if (frontNum >= len || frontNum < 0 || endNum >= len || endNum < 0)
return content;
if (frontNum + endNum >= len)
return content;
int beginIndex = frontNum;
int endIndex = len - endNum;
char[] cardChar = content.toCharArray();
for (int j = beginIndex; j < endIndex; j++) {
cardChar[j] = '*';
}
return new String(cardChar);
}
与以下两种写法比较了效率,1.正则表达式(http://blog.csdn.net/kouwoo/article/details/42918887),2.字符串替换(http://blog.csdn.net/qin20082012/article/details/52371615),可以看到运行一千万次,性能比正则写法提高60多倍,比字符串替换提高8倍多,并且运行次数增加性能差异越大。