You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:06:07