私は次の方法を持っています:
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());
}
例外はスローされませんが、なぜですか?最初に、「例外」式に論理的な問題があると思ったので、次のパターンでこの値を試しました。
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」が含まれているのに、なぜ一致しないのですか?