我试图对用户输入的等式进行数字分组,例如尺寸不确定; 9000 + 1000 x 2这是存储在一个字符串中,我想把它变成9,000 + 1,000 x 2.我现在的代码只会工作,直到它达到非数字是我的方式我可以记录位置它找到非数字的位置并跳过它以获得下一个数字。
到目前为止我的代码;
DecimalFormat formatter = new DecimalFormat("#,###.##");
if(loop == true) {
double amount = ((Number)NumberFormat.getInstance().parse(CalculatorComponent.values)).intValue();
temp = formatter.format(amount);
System.out.println(temp);
}
循环变量目前始终设置为true,而CalculatorComponent.values是当前输入数据的字符串,包括运算符。
答案 0 :(得分:2)
这是一个使用正则表达式解析输入并替换值的解决方案。
// your format
DecimalFormat formatter = new DecimalFormat("#,###.##");
// your input
String input = "9000 + 1000 x 2";
// StringBuffer holding the replaced String
StringBuffer result = new StringBuffer(input.length());
// pattern for 1+ consecutive digits
Pattern pattern = Pattern.compile("\\d+");
// matcher for your input
Matcher matcher = pattern.matcher(input);
// iterating over matches
while (matcher.find()) {
// replacing matches
matcher.appendReplacement(
result,
formatter.format(Integer.valueOf(matcher.group()))
);
}
// appending tail (not applicable in this example, but need to have)
matcher.appendTail(result);
// printing result
System.out.println(result);
<强>输出强>
9,000 + 1,000 x 2
备注强>
Matcher#appendReplacement
需要一个StringBuffer
,而不是一个StringBuilder
- 从来没有弄明白为什么,因为它没有利用任何多线程操作Number
以格式化它们(因此Integer.valueOf
调用),但该操作在此上下文中是安全的Matcher#appendTail
调用很有用,因此它也可以添加到结果中