Java ha un int.tryparse che non genera un’eccezione per i dati non validi?

Possibile duplicato:
Java: buon modo per incapsulare Integer.parseInt ()
come convertire una stringa in float ed evitare di usare try / catch in java?

C # ha Int.TryParse: Metodo Int32.TryParse (String, Int32%)

L’aspetto positivo di questo metodo è che non genera un’eccezione per i dati non validi.

In java, Integer.parseInt("abc") genererà un’eccezione e, nei casi in cui ciò potrebbe accadere, ne soffriranno molte prestazioni.

C’è un modo per aggirare questo in qualche modo per quei casi in cui le prestazioni sono un problema?

L’unico altro modo in cui posso pensare è quello di eseguire l’input su un’espressione regolare, ma devo testare per vedere cosa è più veloce.

No. Devi fare il tuo proprio così:

 boolean tryParseInt(String value) { try { Integer.parseInt(value); return true; } catch (NumberFormatException e) { return false; } } 

… e puoi usarlo in questo modo:

 if (tryParseInt(input)) { Integer.parseInt(input); // We now know that it's safe to parse } 

Apache Commons ha una class IntegerValidator che sembra fare ciò che vuoi. Java non fornisce alcun metodo integrato per farlo.

Modifica : hai appena visto il tuo commento sui problemi di prestazioni associati a una parte potenzialmente errata dei dati di input. Non so a torto come provi / prendi in analisi paragonare a una regex. Suppongo, basandomi su pochissime conoscenze, che le regex non siano estremamente performanti, rispetto a try / catch, in Java.

Ad ogni modo, lo farei solo così:

 public Integer tryParse(Object obj) { Integer retVal; try { retVal = Integer.parseInt((String) obj); } catch (NumberFormatException nfe) { retVal = 0; // or null if that is your preference } return retVal; }