W3docs

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");   // -7

Um + 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.

AbordagemRetornaUse quando
Integer.parseInt(s)int primitivovocê quer fazer aritmética imediatamente
Integer.valueOf(s)objeto Integervocê precisa de um wrapper para uma coleção ou generics
Integer.parseInt(s, radix)int primitivoo 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:

java— editable, runs on the server

O que observar na execução:

  • Integer.parseInt("42") imprime 42 como um int primitivo, e Integer.valueOf("42") imprime o mesmo 42 — a diferença é o tipo, um objeto vs. um primitivo, não o valor.
  • A sobrecarga com radix transforma "ff" em 255, provando que o segundo argumento controla a base; sem radix, o padrão é 10.
  • "12x" é rejeitado com NumberFormatException cuja mensagem é For input string: "12x" — a exceção nomeia o texto exato que falhou, o que a torna útil em logs.
  • Passar null lança NumberFormatException (mensagem Cannot parse null string), não NullPointerException — portanto, uma única captura de NumberFormatException cobre tanto a entrada malformada quanto a nula.
  • O helper tryParse remove os espaços de " 7 " obtendo 7 e retorna absent para "nope", sem nunca lançar — esse é o padrão a usar quando a entrada inválida é normal em vez de excepcional.

Prática

Prática
O que acontece quando você chama Integer.parseInt('3.14') no Java?
O que acontece quando você chama Integer.parseInt('3.14') no Java?

Tópicos relacionados

Was this page helpful?