ti-enxame.com

O Java tem um int.tryparse que não lança uma exceção para dados inválidos?

Possível Duplicar:
Java: boa maneira de encapsular Integer.parseInt ()
como converter uma string para float e evitar usar try/catch em java?

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

A grande coisa com esse método é que ele não lança uma exceção para dados ruins.

Em Java, Integer.parseInt("abc") lançará uma exceção e, nos casos em que isso possa acontecer, muito desempenho será prejudicado.

Existe alguma maneira de contornar isso de alguma forma para os casos em que o desempenho é um problema?

A única outra maneira que posso pensar é executar a entrada contra um regex, mas tenho que testar para ver o que é mais rápido.

97
codecompleting

Não. Você tem que fazer o seu próprio assim:

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

... e você pode usá-lo assim:

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

O Apache Commons tem uma classe IntegerValidator que parece fazer o que você quer. Java não fornece um método embutido para fazer isso.

27
Graham Borland

Editar - só vi o seu comentário sobre os problemas de desempenho associados a uma peça potencialmente ruim de dados de entrada. Eu não sei de improviso como try/catch no parseInt se compara a um regex. Eu diria, com base em muito pouco conhecimento, que os regexes não são extremamente eficientes, em comparação com try/catch, em Java.

De qualquer forma, eu só faria isso:

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;
}
0
Jim Kiley