1

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

我提到了这个链接。

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

假设我有一个数字12345678

使用上面的链接,我将分成 3 个位置。所以输出变为123 456 78.

但我想要它,12 345 678并且我想把被分割成表格的字符串 12.345.678

有人可以帮我吗?

4

5 回答 5

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);
于 2013-01-24T07:22:38.980 回答
2

一种懒惰的方法是反转字符串,应用上述方法,然后再次反转它。

您可以使用StringBuffer 的 Reverse Function,如使用 Java 反转“Hello World”字符串的每个单词中所示

12345678

87654321

876 543 21

12 345 678

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

不太懒惰的方法是使用字符串长度来调整您链接的方法以从length%3字符开始。

于 2013-01-24T07:10:03.170 回答
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;
  }  
于 2013-01-24T07:14:51.557 回答
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
于 2013-01-24T07:34:32.283 回答
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})。

于 2013-01-24T07:45:50.403 回答