2011-11-07 92 views
1

如何在从上次开始的每3个位置后插入一个字符串逗号(,)?如何将数字格式化为固定的语言环境?

input    desired output  

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

我使用的一个方法状的第一三个位置将整个字符串,然后合并而由三个三位置追加昏迷。

有没有更好的解决方案?有没有可用的功能在java中做这个技巧?

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

回答

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(); 
} 
+0

Thnks ...很好的答案 – vnshetty

+0

它会采取基于国家的十进制格式吗?因为它在模拟器(西数标准)中的3位后附加昏迷。但在设备中它追加2位(印度数字标准)..如何将其更改为只有一个标准? – vnshetty

+0

我使用DecimalFormatSymbols(Locale.US);但没有变化... – vnshetty

2

看一看在NumberFormat类,它完全是用于格式化数字作为文本输出。

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

-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); 
相关问题