【发布时间】:2014-03-12 04:17:44
【问题描述】:
是否有已经存在的方法,如果没有,是否可以编写可以格式化大数字并在其中插入逗号的方法?
100 = 100
1000 = 1,000
10000 = 10,000
100000 = 100,000
1000000 = 1,000,000
public String insertCommas(Integer largeNumber) {
}
【问题讨论】:
是否有已经存在的方法,如果没有,是否可以编写可以格式化大数字并在其中插入逗号的方法?
100 = 100
1000 = 1,000
10000 = 10,000
100000 = 100,000
1000000 = 1,000,000
public String insertCommas(Integer largeNumber) {
}
【问题讨论】:
使用NumberFormat,您可以轻松做到这一点:
NumberFormat format = NumberFormat.getInstance(Locale.US);
System.out.println(format.format(100));
System.out.println(format.format(1000));
System.out.println(format.format(1000000));
将输出:
100
1,000
1,000,000
【讨论】:
您可以将NumberFormat#getNumberInstance 与Locale.US 一起使用:
Locale 对象代表特定的地理、政治或 文化区。需要 Locale 执行其操作的操作 任务被称为 locale-sensitive 并使用 Locale 来定制 用户的信息。例如,显示一个数字是 区域敏感操作——数字应根据 遵守用户所在国家、地区的风俗习惯, 或文化。
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(10000000));
这将打印:
10,000,000
旁注:在 Java 7 中,您可以编写带有下划线的 int:1_000_000。
【讨论】:
你看过DecimalFormat(抽象NumberFormat的派生词)吗?你可以customise你需要的格式。
DecimalFormat myFormatter = new DecimalFormat("###,###.###");
String output = myFormatter.format(value);
另请注意,您可以根据语言环境确定格式。
【讨论】:
你试过java.text.NumberFormat吗?
【讨论】:
我试图非常清楚我在做什么,它可以用更少的行来完成。
算法很简单,我反转输入字符串,然后我使用正则表达式拆分数字,在每个匹配中我们添加一个逗号。
如果数字大小模块 3 为零(例如 123456),我们必须删除最后一个逗号。
现在我们通过再次反转它来恢复原始字符串顺序,瞧。
public String insertCommas(Integer largeNumber) {
String result;
String reversedNum = new StringBuilder(""+largeNumber).reverse().toString();
String reversedResult = "";
Pattern pattern = Pattern.compile("\\d{3}");
Matcher matcher = pattern.matcher(reversedNum);
int lastIndex = reversedNum.length();
while(matcher.find()){
reversedResult += matcher.group()+",";
lastIndex = matcher.end();
}
String remaining = reversedNum.substring(lastIndex);
reversedResult += remaining;
result = new StringBuilder(reversedResult).reverse().toString();
if(remaining.isEmpty()){
result = new StringBuilder(reversedResult).reverse().toString().substring(1);
}else{
result = new StringBuilder(reversedResult).reverse().toString();
}
return result;
}
【讨论】: