Код: Выделить всё
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);
}
}
< /code>
Это значение бросает исключение (как и ожидалось), поэтому эта Regexpr работает: < /p>
String wrongAmount = "1,U35,345.43";
< /code>
Но когда я попробую это: < /p>
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());
}
< /code>
Нет исключения, но почему?
Сначала я подумал, что существует логическая проблема с выражением «кроме», поэтому я попробовал это значение с помощью этого шаблона: < /p>
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());
}
< /code>
... но это не соответствует? Что я понял неправильно на «незначном выражении» \\ d. Подробнее здесь: https://stackoverflow.com/questions/100 ... er-classes