2

在发布问题之前,我已经对该主题进行了一些研究,但找不到答案。

这是我正在尝试做的事情:

输入:一个 7-8 个小数位长的数字(无分数)。

输出:“X XXXXXX X”,其中 X 是一个数字,必须存在。

例如:1234567 => 0 123456 7

我尝试了什么:

DecimalFormatSymbols group = new DecimalFormatSymbols();  
group.setGroupingSeparator(' '); 
DecimalFormat idFormat = new DecimalFormat("0,000000,0", group);

但这会打印出类似“0 1 2 3 4 5 6 7”的东西:S我做错了什么?

编辑:

如果我这样做,我可以打印我需要的东西:

DecimalFormatSymbols group = new DecimalFormatSymbols();  
group.setGroupingSeparator(' ');
group.setDecimalSeparator(' ');
DecimalFormat idFormat = new DecimalFormat("0,000000.0", group);

通过重新阅读手册,我意识到 DecimalFormat 没有办法打印可变长度组(幸运的是我只需要 2 个 - 所以我可以使用小数部分)。但是你将如何“正确”地做到这一点?在这里使用正则表达式/编写我自己的函数可以吗,或者是否有库已经这样做了?

编辑2:

只是为了好玩,下面是基于正则表达式的方法:)

Random random = new Random();
System.out.println(
      String.valueOf(Math.round(random.nextDouble() * 1e8))
      .replaceAll("(.*)(\\d{6})(\\d)$", "$1 $2 $3")
      .replaceAll("^ ", "0 "));
4

2 回答 2

1

我认为您不能DecimalFormat为此使用分组分隔符。从Javadoc

如果您提供具有多个分组字符的模式,则最后一个和整数末尾之间的间隔就是所使用的间隔。所以 "#,##,###,####" == "######,####" == "##,####,####"。

于 2012-04-19T14:12:40.063 回答
0

您可以将 ICU4J 库的com.ibm.icu.text.DecimalFormat类用于同样的目的。它支持可变长度组大小。对于您的特定情况:

com.ibm.icu.text.DecimalFormatSymbols dfs = new com.ibm.icu.text.DecimalFormatSymbols();
dfs.setGroupingSeparator(' ');
com.ibm.icu.text.DecimalFormat df = new com.ibm.icu.text.DecimalFormat("0,000000,0", dfs); 

对于像“1234567”这样的数字,这应该打印“0 123456 7”。

于 2013-03-20T10:51:19.107 回答