Domanda

Convaliderò l'input dell'utente da un modulo.

Analizzo l'input con NumberFormat, ma è malvagio e permette quasi tutto. C'è un modo per analizzare il numero più severo?

Ad esempio, vorrei non permettere questi tre input, per un numero intero, ma Numberformat consentirli tutti:

NumberFormat nf = NumberFormat.getNumberInstance();
nf.setParseIntegerOnly(true);

Number numberA = nf.parse("99.731");    // 99 (not what the user expect)
Number numberB = nf.parse("99s.231");   // 99 (invalid)
Number numberC = nf.parse("9g9");       // 9  (invalid)

System.out.println(numberA.toString());
System.out.println(numberB.toString());
System.out.println(numberC.toString());

Nessuna soluzione corretta

Altri suggerimenti

Forse questo aiuta:

String value = "number_to_be_parsed".trim();
NumberFormat formatter = NumberFormat.getNumberInstance();
ParsePosition pos = new ParsePosition(0);
Number parsed = formatter.parse(value, pos);
if (pos.getIndex() != value.length() || pos.getErrorIndex() != -1) {
    throw new RuntimeException("my error description");
}

(Grazie a Numero rigoroso Analisi su mynetgear.net)

Ci sono molti modi per farlo:

Integer.parseInt(String) lancerà una NumberFormatexception su tutti i tuoi esempi. Non sono sicuro che sia quello che stai cercando, ma è sicuramente "più severo".

Utilizzare DecimalFormat con una stringa di pattern di formato.

Dai un'occhiata a DecimalFormat che è una sottoclasse di NumberFormat http://docs.oracle.com/javase/6/docs/api/java/text/decimalformat.html

Decimalformat myFormatter = new decimalFormat ("###. ###");

Non userei la routine del formato numerico di Java, specialmente con le impostazioni locali se ti preoccupi della convalida.

    Locale numberLocale = new Locale(“es”,”ES");
    NumberFormat nf = NumberFormat.getInstance(numberLocale);
    ParsePosition pos = new ParsePosition(0);
    Number test = nf.parse("0.2", pos);

Ci si aspetterebbe che ci sia un problema qui, ma no. Il test è uguale a 2 e POS ha un indice di 3 e un indice di errore di -1.

Ho rinunciato a scrivere la mia classe di validazione e sono andato con Widget di Nebula Testo formato

È stato scritto sull'API Widget SWT, ma puoi facilmente adattare il Classe Numberformatter

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top