数字过长时看起来很累需要将数字进行拆分隔开显示:例如 1234567890 显示为1,234,567,890。
实现这个功能有好几种方式,这里例举出3中方式:
第一种方式:使用StringBuffer将数字字符串进行反转:例如将1234567890 反转后变为0987654321
然后根据输入的拆分位数计算出在什么地方插入“,”号。然后将分隔好的字符串反转
/**
* @param value
* @param size 分位的大小
* @return
*/
public static String divideNumber(long value, int size) {
StringBuffer sb = new StringBuffer(String.valueOf(value));
sb = sb.reverse();
int length = sb.length();
if (size == 0) {
size = length;
}
int count = 0;
if (length % size == 0) {
count = length / size - 1;
} else {
count = length / size;
}
for (int i = 0; i < count; i++) {
sb = sb.insert((i + 1) * size + i, ",");
}
return sb.reverse().toString();
}
第二种方式:利用正则表达式进行分隔
public static String divideNum(long value, int length) {
String str = String.valueOf(value);
//如果没有指定分位的长度则直接返回
if (length == 0) {
return str;
} else {
//根据指定的分位长度拼接正则表达式
StringBuffer buffer = new StringBuffer();
buffer.append("(?<=\\d)(?=(?:\\d{");
buffer.append(length);
buffer.append("})+$)");
return str.replaceAll(buffer.toString(), ",");
}
}
第三种方式也是利用StringBuffer的insert实现,但是实现更加清晰易懂
public static String divideNumber(long value,int length) {
StringBuffer buffer = new StringBuffer();
int len = buffer.append(value).length();
if (len <= length)
return buffer.toString();
//从后往前插入分隔符
while ((len -= length) > 0) {
buffer.insert(len, ",");
}
return buffer.toString();
}