我正在尝试使用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可以进入该方法的所有不同方式。因此,这里的要求非常重要。

09-04 04:38