Como Converter String em int no Java
Converta uma string Java em int com Integer.parseInt e Integer.valueOf, e trate NumberFormatException.
Transformar texto como "42" no número 42 é uma das tarefas mais comuns em Java — aparece toda vez que você lê argumentos de linha de comando, analisa um valor de configuração ou processa entradas de formulário. O JDK oferece algumas ferramentas de uma linha para isso na classe Integer, além de um modo de falha claro quando o texto não é um número válido. Este capítulo mostra as abordagens idiomáticas e como lidar com os casos inválidos.
Integer.parseInt — o int primitivo que você normalmente quer
Integer.parseInt(String) é a ferramenta principal. Ela lê o texto e retorna um int primitivo:
int count = Integer.parseInt("42"); // 42
int neg = Integer.parseInt("-7"); // -7Um + ou - inicial é permitido, mas nada mais: espaços ao redor, pontos decimais, underscores ou letras causam falha. Se você pode ter espaços em branco, remova-os primeiro com s.trim() (ou s.strip() no Java 11+). Há também uma sobrecarga que aceita um radix, então Integer.parseInt("ff", 16) lê hexadecimal e retorna 255.
Integer.valueOf — quando você precisa de um objeto Integer
Integer.valueOf(String) faz a mesma análise, mas retorna um Integer (o wrapper encapsulado) em vez de um int primitivo. Use-o quando o valor vai diretamente para uma coleção como List<Integer> ou em qualquer lugar onde uma referência de objeto seja necessária. Como bônus, valueOf armazena em cache as instâncias encapsuladas para valores pequenos (−128 a 127), portanto pode ser marginalmente mais barato do que parseInt seguido de autoboxing.
| Abordagem | Retorna | Use quando |
|---|---|---|
Integer.parseInt(s) | int primitivo | você quer fazer aritmética imediatamente |
Integer.valueOf(s) | objeto Integer | você precisa de um wrapper para uma coleção ou generics |
Integer.parseInt(s, radix) | int primitivo | o texto está na base 2, 8, 16, etc. |
Tratando entrada inválida com NumberFormatException
Ambos os métodos lançam uma NumberFormatException não verificada quando a string não é um inteiro analisável — "12x", "3.14", "" ou null falham. Por ser não verificada, o compilador não obriga você a capturá-la, então cabe a você proteger entradas que não controla:
String raw = userInput();
try {
int value = Integer.parseInt(raw.trim());
// ... use value
} catch (NumberFormatException e) {
System.out.println("Not a whole number: " + raw);
}Quando a análise "deve falhar às vezes" e você não quer exceções no seu fluxo de controle, encapsule-a em um helper que retorne um OptionalInt em vez de lançar. Isso transforma um try/catch em uma verificação limpa de isPresent() no local de chamada. Veja Java Optional para o padrão mais amplo e Java try-catch para a mecânica de captura da exceção.
Um exemplo prático: todas as abordagens lado a lado
Este programa executa cada técnica de conversão e os dois casos de falha, para que você possa ver exatamente o que cada um retorna ou imprime:
O que observar na execução:
Integer.parseInt("42")imprime42como umintprimitivo, eInteger.valueOf("42")imprime o mesmo42— a diferença é o tipo, um objeto vs. um primitivo, não o valor.- A sobrecarga com radix transforma
"ff"em255, provando que o segundo argumento controla a base; sem radix, o padrão é 10. "12x"é rejeitado comNumberFormatExceptioncuja mensagem éFor input string: "12x"— a exceção nomeia o texto exato que falhou, o que a torna útil em logs.- Passar
nulllançaNumberFormatException(mensagemCannot parse null string), nãoNullPointerException— portanto, uma única captura deNumberFormatExceptioncobre tanto a entrada malformada quanto a nula. - O helper
tryParseremove os espaços de" 7 "obtendo7e retornaabsentpara"nope", sem nunca lançar — esse é o padrão a usar quando a entrada inválida é normal em vez de excepcional.
Prática
Tópicos relacionados
- Como Converter um int em String no Java — a direção inversa.
- Java Exceptions — contexto sobre
NumberFormatExceptione a família de exceções não verificadas. - Java Data Types — a diferença entre o primitivo
inte o wrapperInteger.