2013-01-24 530 views
1

我想分割號碼,但不知道如何做到這一點。如何在java中分割數字?

我把這個鏈接引用了。

https://stackoverflow.com/a/12297231/1395259

假設我有一個數12345678

使用上述鏈接我由3分割places.So輸出變爲12345678

但我想把它當作12345678我希望把在形式12.345.678拆分字符串。

任何人都可以幫助我嗎?

+0

你想格式化一個整數,還是你實際上有一個字符串?這個數字有多長?你想要分隔符取決於語言環境嗎? –

+0

我有整數和分裂我將它轉換成字符串 –

+0

不,我不想單獨取決於locale.I只是想點(。) –

回答

10

java.text包提供了所有合理選項格式化數字

DecimalFormat f = new DecimalFormat("#,###"); 
    DecimalFormatSymbols fs = f.getDecimalFormatSymbols(); 
    fs.setGroupingSeparator('.'); 
    f.setDecimalFormatSymbols(fs); 
    String s = f.format(12345678); 
    System.out.println(s); 

輸出

12.345.678 

直接使用DecimalFormat非常靈活,但通常我們可以使用較短的v版爲

String s = NumberFormat.getNumberInstance(Locale.GERMAN).format(12345678); 

產生相同的字符串

12.345.678 

不同的國家有格式化數字(和日期)不同的規則。通常,我們希望我們的方案,以國際化/本地化,並使用默認的語言環境版本

NumberFormat.getNumberInstance().format(number); 
+0

完美的解決方案。非常感謝 –

2

一種懶惰的方法是顛倒字符串,應用上面的方法,然後再次顛倒它。

您可以使用StringBuffer's Reverse Function,如圖Reverse each individual word of "Hello World" string with Java

12345678 

87654321 

876 543 21 

12 345 678 

我假設當然是要通過3S分裂與< 3位數組留出現在開始,而不是結束,如您鏈接的方法。

不那麼懶惰的方式將使用字符串長度來適應您鏈接的方法,以length%3字符開頭。

0

使用從你的鏈接的解決方案,我會換一種說法如下(測試!):

public String[] splitStringEvery(String s, int interval) { 
    int arrayLength = (int) Math.ceil(((s.length()/(double)interval))); 
    String[] result = new String[arrayLength]; 

    int j = s.length(); 
    int lastIndex = result.length; 
    for (int i = lastIndex - 1; i > 0; i--) { 
     result[i] = s.substring(j - interval, j); 
     j -= interval; 
    } //Add the last bit 
    result[0] = s.substring(0, j); 

    return result; 
    } 
0

這裏是一個分裂的int值,並返回指定格式的字符串的方法:

public static String split(int n) { 
    String result = "", s = Integer.toString(n); 
    while (s.length() > 3) { 
     result = s.substring(s.length() -3, s.length()) + ((result.length() > 0)? "." + result : ""); 
     s = s.substring(0, s.length() -3); 
    } 
    return s + "." + result; 
} 

輸入:

12345678 

輸出:

12.345.678 
+0

永遠不要將字符串連接在一起。改用StringBuilder。也可以使用整數來表示您在字符串中的位置,而不是一遍又一遍地爲's'創建新字符串。 – Nemo64

0

如果它是一個字符串,請使用StringBuilder或StringBuffer。下面的代碼:

public class SplitNumber { 
    public static void main(String[] args){ 
     int number = 12345678; 

     String numberStrBefore = Integer.toString(number); 

     StringBuffer numberStrAfter = new StringBuffer(); 
     numberStrAfter.append(numberStrBefore.charAt(0)); 
     numberStrAfter.append(numberStrBefore.charAt(1)); 
     numberStrAfter.append('.'); 
     numberStrAfter.append(numberStrBefore.charAt(2)); 
     numberStrAfter.append(numberStrBefore.charAt(3)); 
     numberStrAfter.append(numberStrBefore.charAt(4)); 
     numberStrAfter.append('.'); 
     numberStrAfter.append(numberStrBefore.charAt(5)); 
     numberStrAfter.append(numberStrBefore.charAt(6)); 
     numberStrAfter.append(numberStrBefore.charAt(7)); 

     System.out.println("Number Before: " + numberStrBefore); 
     System.out.println("Number After: " + numberStrAfter.toString()); 
    } 
} 

這裏是一個方法同樣的事情:

public class SplitNumber { 
    public static void main(String[] args){ 
     int number = 12345678; 
     int[] split = {2,3,3}; //How to split the number 

     String numberStrAfter = insertDots(number, split); 

     System.out.println("Number Before: " + number); 
     System.out.println("Number After: " + numberStrAfter); 
    } 

    public static String insertDots(int number, int[] split){ 
     StringBuffer numberStrAfter = new StringBuffer(); 
     String numberStr = Integer.toString(number); 

     int currentIndex = 0;  
     for(int i = 0; i < split.length; i++){ 
      for(int j = 0; j < split[i]; j++){ 
       numberStrAfter.append(numberStr.charAt(currentIndex)); 
       currentIndex++; 
      } 
      numberStrAfter.append('.'); 
     } 
     numberStrAfter.deleteCharAt(numberStrAfter.length()-1); //Removing last "." 

     return numberStrAfter.toString(); 
    } 
} 

這個版本,該方法,可以讓你任意數量分割成任何你想要的格式,只需更改將「split」變量轉換爲您想要將字符串拆分爲的格式。 (例如:將12345678拆分爲:1.1234.5.67.8意味着「拆分」必須設置爲{1,4,1,2,1})。