DecimalFormat überprüfen

  • Themenstarter Themenstarter Jan_HH
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

Jan_HH

Gast
Hallo,

gibt es eine einfache Möglichkeit, zu überprüfen, ob ein String dem Pattern eines DecimalFormat entspricht? Also ich habe beispielsweise ein DecimalFormat für Geldbeträge, mit bis zu drei Stellen vor dem Komma und exakt zwei nach dem Komma, das Pattern wäre also "##0,00". Nun würde ich gerne überprüfen, ob Strings, die der User eingibt, diesem Pattern entsprechen.

Es handelt sich ja beim DecimalFormat-Pattern scheinbar NICHT um ein regular expression-Pattern, so dass die Pattern/Matcher-Sache, die es dafür ja gibt, in diesem Fall nicht funktionieren dürfte. Die Funktionalität per Hand zu programmieren kommt mir ein wenig komplex vor. Gibt es da eine einfache Methode für?

Gruß+Danke
Jan
 
das Pattern einsetzen, also parsen?!
bei einer Exception hats nicht gepasst
 
deine Antwort nicht verstehe,

bzw. ich möchte nicht mein komplettes langes Posting neuformuliert wiederholen,
beschreibe bitte WAS du nicht verstehst (Wörter, Satzbau, Zusammenhang, ..) in langen Sätzen 😉
 
@SlaterB: Er hat nicht kapiert, wie er's testen soll.

@Jan_HH: Slater meint in etwa das:
Code:
/**
 * Checks whether the given text can be parsed by the given format.
 * 
 * @param format the format to parse the input string with
 * @param input the input string to be parsed
 * @return <code>true</code> if the given input string can be parsed by the
 *         given format
 */
public static boolean isParsable(Format format, String input) {
  try {
    format.parseObject(input);

    return true;
  } catch (ParseException ex) {
    return false;
  }
}

Benutzen kannst Du die Methode in etwa so:
Code:
if (isParsable(DecimalFormat.getCurrencyInstance(), "100,00\u20AC")) {
  System.out.println("You are a European");
} else if (isParsable(DecimalFormat.getCurrencyInstance(), "$100.00")) {
  System.out.println("You are an American");
} else {
  System.out.println("You are an Alien");
}

Gruß, Ebenius
 
Vielen Dank. Dass man mit dem Format auch Strings parsen (und damit dann auch überprüfen kann) war mir einfach nicht bekannt. Die erste Antwort war einfach zu kurz, es ging daraus für mich nicht klar hervor.
 
Funktioniert allerings nicht. Das parsen akzeptiert alles mögliche, was sich als Zahl interpretieren lässt, und keineswegs nur das, was dem Format entspricht. Wenn ich "0.00" als Format angebe, will ich, dass auch wirklich exakt zwei Nachkommastellen vorhanden sein müssen. Das kann ich damit nicht sicherstellen.

Meine Lösung (vorerst): Wenn der zu überprüfende String eine Zahl ist, diesen in eine Zahl konvertieren (double), und diese dann wieder mit dem DecimalFormat in einen String konvertieren. Wenn dieser dann identisch mit dem Ursprungs-String ist, ist alles ok. Dabei muss noch beachtet werden, dass man führende Nullen entfernen muss, und ggf. das Dezimaltrennzeichen im DecimalFormat anpassen muss (Komma statt Punkt), oder selbiges im zu parsenden String vor dem konvertieren muss (Punkt statt Komma). Mit dieser Methode erreiche ich einigermassen das, was ich will.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben