如何将数字格式化为固定的语言环境?

时间:2011-11-07 10:34:35

标签: java android

如何在从上一个开始的每3个位置之后插入一个逗号(?)字符串?

input             desired output    

9876567846678     9,876,567,846,678  
567               567
1234              1,234

我使用了一种方法,例如首先将整个字符串分成三个位置,然后将三个位置合并追加昏迷。

有没有更好的解决方案?在java中有没有可用于执行此操作的功能?

编辑:
LAS_VEGAS答案将根据区域设置格式化数字。但我想将其格式化为固定的语言环境...
我该怎么办?

3 个答案:

答案 0 :(得分:5)

是的,有一个"技巧"在Java中:

public static String addCommas(int num) {
    DecimalFormat df = new DecimalFormat();
    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setGroupingSeparator(',');
    df.setDecimalFormatSymbols(dfs);
    return df.format(num);
}

System.out.println(addCommas(123456789));

修改 如果您希望输出独立于区域设置,可以使用以下方法。它从结尾开始,因此不需要反转字符串,应该非常有效:

public static String addCommas(int num) {
    StringBuilder s = new StringBuilder(Integer.toString(num));
    for(int i = s.length() - 3; i > 0; i -= 3) {
        s.insert(i, ',');
    }
    return s.toString();
}

答案 1 :(得分:2)

查看NumberFormat类,它完全用于将数字格式化为文本输出。

特别是,DecimalFormat使用,符号作为分隔符的实例是您正在寻找的。例如,#,##0的格式模式应该根据需要输出整数,如果没有其他约束。

答案 2 :(得分:-1)

好吧,你也可以使用StringBuilder来做到这一点。这是一个快速入侵的解决方案:

StringBuilder sb = new StringBuilder("123456789");

        int initLength = sb.length();
        for(int i=1; i<initLength; i++){
            if(i % 3 == 0){
                sb.insert(initLength-i, ",");
            }
        }

        System.out.println(sb);