如何在java中拆分数字?

时间:2013-01-24 07:07:04

标签: java

我正在尝试拆分数字,但不知道该怎么做。

我提到了这个链接。

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

假设我有一个号码12345678

使用上面的链接我分为3个位置。因此输出变为 123 456 78

但我希望它为 12 345 678 我希望将 {{1}形式的字符串拆分}

有人可以帮帮我吗?

5 个答案:

答案 0 :(得分: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非常灵活,但通常我们可以使用更短的版本

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

产生相同的字符串

12.345.678

不同的国家/地区对格式化数字(和日期)有不同的规则。通常我们希望我们的程序国际化/本地化并使用默认语言环境版本

NumberFormat.getNumberInstance().format(number);

答案 1 :(得分:2)

一种懒惰的方法是反转字符串,应用上面的方法,然后再将其反转。

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

所示
12345678

87654321

876 543 21

12 345 678

我当然假设您想要拆分3秒,并且剩下< 3位数的组会出现在开头而不是结尾,就像您链接的方法一样。

不那么懒惰的方法是使用字符串长度来调整你链接的方法以length%3个字符开头。

答案 2 :(得分:0)

使用链接中的解决方案我会将其改为以下(TESTED!):

  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;
  }  

答案 3 :(得分:0)

这是一个分割int值并以指定格式返回String的方法:

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

答案 4 :(得分:0)

如果是String,请使用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();
    }
}

使用此方法,此版本允许您将任何数字拆分为任何所需的格式,只需将“拆分”变量更改为要将字符串拆分为的格式即可。 (例如:将12345678拆分为:1.1234.5.67.8意味着“拆分”必须设置为{1,4,1,2,1})。