Ich habe die folgende Methode:RegExpr Verwirrung mit negierten Zeichenklassen?
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);
}
}
Dieser Wert zeigt eine Ausnahme auslöst (wie erwartet), so dass dieser RegExpr funktioniert:
String wrongAmount = "1,U35,345.43";
Aber wenn ich versuche dies:
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());
}
Keine Ausnahme wird geworfen, aber warum? Zuerst dachte ich, dass es ein logisches Problem mit der „Ausnahme“ Ausdruck so dass ich diesen Wert mit diesem Muster versucht:
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());
}
... aber das stimmt nicht überein? Was habe ich falsch verstanden auf dem "non-digit expression" \\D.
. Der Wert enthält ein "U", also warum passt es nicht?
Ah, du hast Recht. Logische Verwirrung :) – Bevor
Das zweite Beispiel sagt das nicht wirklich. Lies meine Antwort. – NullUserException
@NullUserException und lesen Sie, was ich in meiner Klammer sage! –