我正在尝试使用NumberFormat.getCurrencyInstance()将我的货币字符串解析为一个十进制。
The following scenario
$1,000.01 Pass
1000.01 Pass
1,000.01 Fail -> This needs to be parsed to 1000.01 in order to pass.
abc Fail -> correct behavior.
我的方法
public BigDecimal parseClient(Field field, String clientValue, String message) throws ValidationException {
if (clientValue == null) {
return null;
}
NumberFormat nf = NumberFormat.getCurrencyInstance();
try {
return new BigDecimal(nf.parse(clientValue).toString());
} catch (ParseException ex) {
throw new ValidationException(message);
}
}
有人知道有一个好的解决方案可以使它正常工作吗?
最佳答案
这是蛮力的,但是为什么不只检查字符串开头是否存在货币字符,如果不存在,则在字符串前面添加货币字符?
if ( !clientValue.startsWith( "$" ) )
{
clientValue = "$" + clientValue;
}
如果不需要暴力破解方法,则下一种方法是记下客户端可以使用的每种格式。然后,创建处理这些传入输入格式所需的尽可能多的DecimcalFormat实例-并对其进行解析。
另一种方法是将传入的clientValue标准化为单一格式。这可以通过字符串操作和正则表达式来完成。但是,仍然存在一个问题,您需要了解传入的clientvalue可以进入该方法的所有不同方式。因此,这里的要求非常重要。