Java如何使用任意分隔符按指定规则格式化长数字
解决方案
方法1:修正DecimalFormat模式(简单场景适用)
你原来的代码不生效的原因是:DecimalFormat的模式字符串有特殊语义规则,空格、横杠这类自定义分隔符属于字面量内容,必须用单引号包裹才会被原样输出,修改后的示例如下:
// 输出 12 34567 89012 3 样式 DecimalFormat decimalFormat = new DecimalFormat("00' '00000' '00000' '0"); System.out.println(decimalFormat.format(1234567890123L));
如果需要混合多种分隔符,直接把对应分隔符用单引号包裹即可:
// 输出 1-234 567-890 1 23 样式 DecimalFormat decimalFormat = new DecimalFormat("0'-'000' '000'-'000' '0' '00"); System.out.println(decimalFormat.format(1234567890123L));
方法2:自定义字符串处理(复杂灵活场景适用)
如果你的分组规则动态变化、或者分隔符规则更复杂,可以直接把数字转为字符串后按规则插入分隔符,下面是通用实现示例:
/** * 自定义数字格式化 * @param num 待格式化的长数字 * @param pattern 格式模板,用0占数字位,其余字符直接作为分隔符输出 * @return 格式化后的字符串 */ public static String customFormatNumber(long num, String pattern) { String numStr = String.valueOf(num); StringBuilder result = new StringBuilder(); int numCursor = 0; for (char c : pattern.toCharArray()) { if (c == '0') { // 模板中0的位置填充数字 if (numCursor < numStr.length()) { result.append(numStr.charAt(numCursor++)); } } else { // 其余字符直接作为分隔符输出 result.append(c); } } return result.toString(); } // 调用示例 public static void main(String[] args) { long targetNum = 1234567890123L; System.out.println(customFormatNumber(targetNum, "00 00000 00000 0")); System.out.println(customFormatNumber(targetNum, "0-234 567-890 1 23")); }
这个实现完全不受内置模式规则限制,支持任意分隔符、任意分组长度的格式化需求。
内容的提问来源于stack exchange,提问作者Simon Martinelli
相关产品推荐
相关产品推荐

