146 votes

Java a-t-il un int.tryparse qui ne lève pas d'exception pour les mauvaises données?

Double Possible:
Java: une Bonne façon pour encapsuler Entier.parseInt()
comment convertir une chaîne de flotter et d'éviter d'utiliser try/catch en java?

C# Int.TryParse: Int32.Méthode TryParse (String, Int32%)

La grande chose avec cette méthode, c'est qu'il ne lance pas d'exception pour les données de mauvaise qualité.

En java, Integer.parseInt("abc") lèvera une exception, et dans les cas où cela peut se produire beaucoup de choses performances s'en ressentiront.

Est-il un moyen de contourner cela en quelque sorte, pour les cas où la performance est un problème?

La seule autre façon que je peux penser est d'exécuter l'entrée à l'encontre d'une regex, mais j'ai tester pour voir ce qui est plus rapide.

104voto

Woot4Moo Points 14245

Non, vous devez avoir les vôtres comme celles-ci:

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

utilisation pratique:

 if(tryParseInt(myInput))
{  
   Integer.parse(myInput);  //We know it is safe to parse.
}
 

34voto

Graham Borland Points 27556

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

2voto

Jim Kiley Points 2754

Modifier - vous venez de voir votre commentaire sur les problèmes de performances associés à un élément de données d’entrée potentiellement incorrect. Je ne sais pas à l'avance comment comparer / essayer sur parseInt se compare à une regex. Je suppose que, sur la base de connaissances très limitées, les expressions rationnelles ne sont pas extrêmement performantes, comparées à try / catch, en Java.

Quoi qu'il en soit, je ferais juste ceci:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X