2011-11-07 78 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); 
相關問題