Est-ce que java a un int.tryparse qui ne lance pas d’exception pour les mauvaises données?

Duplication possible:
Java: bon moyen d’encapsuler Integer.parseInt ()
Comment convertir une chaîne en float et éviter d’utiliser try / catch en Java?

C # a Int.TryParse: Int32.TryParse, méthode (Ssortingng, Int32%)

Ce qui est génial avec cette méthode, c’est qu’elle ne lance pas d’exception pour les données incorrectes.

Dans java, Integer.parseInt("abc") lancera une exception et dans les cas où cela peut se produire, beaucoup de performances en souffriront.

Y a-t-il un moyen de contourner ce problème pour les cas où la performance est un problème?

La seule autre chose à laquelle je peux penser, c’est d’exécuter une entrée contre une expression régulière, mais je dois tester pour voir ce qui est plus rapide.

Non, vous devez faire votre propre comme ça:

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

… et vous pouvez l’utiliser comme ceci:

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

Apache Commons a une classe IntegerValidator qui semble faire ce que vous voulez. Java ne fournit aucune méthode intégrée pour ce faire.

Modifier – vous venez de voir votre commentaire sur les problèmes de performance associés à une mauvaise donnée d’entrée. Je ne sais pas comment essayer / attraper parseInt se compare à une regex. Je suppose, sur la base de très peu de connaissances, que les expressions rationnelles ne sont pas très performantes, comparées à essayer / attraper, en Java.

Quoi qu’il en soit, je ferais ça:

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