我有以下方法:
protected BigDecimal stringToBigDecimal(String value) throws ParseException
{
if (Pattern.matches("[\\d,.]+", value))
{
Number n = NumberFormat.getInstance().parse(value);
return new BigDecimal(n.doubleValue());
}
else
{
throw new ParseException("Invalid String", -1);
}
}
此值引发异常(如预期),因此此 regExpr 有效:
String wrongAmount = "1,U35,345.43";
但是当我尝试这个时:
protected BigDecimal stringToBigDecimal(String value) throws ParseException
{
if (Pattern.matches("[\\D&&[^.,]]+", value))
{
throw new ParseException("Invalid String", -1);
}
Number n = NumberFormat.getInstance().parse(value);
return new BigDecimal(n.doubleValue());
}
没有抛出异常,但为什么呢?首先,我认为“except for”表达式存在逻辑问题,所以我用这种模式尝试了这个值:
String wrongAmount = "1U3534543";
protected BigDecimal stringToBigDecimal(String value) throws ParseException
{
if (Pattern.matches("[\\D]+", value))
{
throw new ParseException("Invalid String", -1);
}
Number n = NumberFormat.getInstance().parse(value);
return new BigDecimal(n.doubleValue());
}
...但这不匹配?我对“非数字表达”有什么理解错误\\D.
。该值包含一个“U”,为什么它不匹配?