Converter int para String em Java
Completei mais um curso na 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.