Converter int para String em Java

(Última atualização em: 25 de novembro de 2015)

Completei mais um curso no Alura e aumentei a minha pontuação:

String aluno = “Alex Felipe”;
int pontos = 12000;

Para imprimir a minha pontuação basta concatenar a variável aluno + pontos dentro de um sysout:

System.out.println(aluno + " - " + pontos);

Mas, como eu poderia fazer com que o aluno e a pontuação fossem uma variável só? É simples! A mesma coisa, basta “converter” a variável inteira (int) para String:

String descricao = aluno + " - " + pontos;

Mas agora entrei no instrutor Guilherme Silveira, e olha os pontos dele:

> Guilherme Silveira - 1893769

Olhando de cara qual é o valor desse número? Um milhão e oitocentos mil? Dezoito milhões? Cento e oitenta milhões? Vou ter que contar com o dedo na tela para saber o valor exato, muito chato e é certeza que eu vou errar!

Para separar a pontuação por casas podemos utilizar a classe NumberFormat:

String aluno = "Guilherme Silveira";
int pontos = 1893769;
String descricao = aluno + " - " + NumberFormat.getInstance().format(pontos);
System.out.println(descricao);

Resultado:

> Guilherme Silveira - 1.893.769

Ótimo! O número foi formatado como esperado, porém na maquina do João o resultado foi:

> Guilherme Silveira - 1,879,654

Calma aí. Está dependendo da máquina??? Isso ocorre pois o getInstance devolve um formatador baseado na linguagem configurada na máquina. Para informar uma região específica basta definir uma localização, um Locale.

No meu caso, quero a língua portuguesa ("pt"), com a variação do português brasileiro ("BR").

Locale brasil = new Locale("pt", "BR");
String descricao = aluno + " - “ + NumberFormat.getInstance(brasil).format(pontos);
System.out.println(descricao);

Resultado:

> Guilherme Silveira - 1.893.769

Agora tanto a minha máquina como a do meu colega, ou ainda, a máquina de produção imprimem o mesmo resultado.

Quando começamos a programar, aprendemos a concatenar e parece o suficiente… mas mesmo em uma tarefa simples é importante seguirmos 3 passos:

  • números acima de 999 ficaram legíveis?
  • use o Locale adequado.
  • teste em mais de uma maquina.

A classe Locale e o conceito de regionalização é tambem explicado com mais detalhes nesse post da Caelum.

Content Editor at Alura and Software Developer

  • Henrique M M

    Simples mas bastante interessante.
    Obrigado!

Próximo ArtigoRefatoração em Java: early return na prática