Formatando a saída em Java

Muitas vezes, quando precisamos formatar nossas saídas de forma elaborada, os métodos System.out.print() e System.out.println() não são suficientes.
Existem dois métodos que você pode usar nesses casos:
System.out.printf()String.format()
O método printf()
Esse método geralmente tem 2 partes:
- A String que deseja formatar. Essa string inclui regras de formatação por especificadores como
%d,%s, etc. - A lista de argumentos que Java pode usar para formatar a string de acordo com os especificadores.
Veja um exemplo:
System.out.printf("My Name is %s. I was born in %d", "Mike", 1998);
- A primeira parte é: "My Name is %s. I was born in %d".
- Onde: %s e %d são especificadores de formato.
- A segunda parte é a lista de argumentos: "Mike", 1998.
Diferentes casos de uso do printf()
%d: Exibe um valor inteiro.
public static void main(String[] args){
System.out.printf("Display a Number %d", 15000);
}
Nesse caso, portanto, o %d será substituído por 15000 na saída.
Se você quiser que vários inteiros sejam exibidos na saída, use vários especificadores %d.
%f: Exibe um ponto flutuante.
public static void main(String[] args){
System.out.printf("Display a Number %.2f", 15.23);
}
Nesse caso, será exibido um ponto flutuante com duas casas decimais.
%c: Exibe um caractere%s: Exibe uma String
O método String.format()
Esse método da classe String funciona de forma muito semelhante ao printf(). A principal diferença é que ele retorna uma string em vez de imprimi-la. Vejamos alguns exemplos.
Exemplo:
public static void main(String[] args){
int age = 22;
char initial = 'M';
String surname = "Anderson";
double height = 1.72;
String details = String.format(
"My name is %c. %s.%nMy age is %d.%nMy height is %.2f.",
initial, surname, age, height);
System.out.println(details);
}
A classe String também tem um método mais novo e um pouco mais simples chamado (Object... args) que pode ser usado ao invés do estático String.format. Ambos têm o mesmo corpo, logo são completamente intercambiáveis. Veja um exemplo:
public static void main(String[] args) {
int age = 22;
char initial = 'M';
String surname = "Anderson";
double height = 1.72;
String details = "My name is %c. %s.%nMy age is %d.%nMy height is %.2f."
.formatted(initial, surname, age, height);
System.out.println(details);
}
Obs.: lembre-se que formatted é um método de instância, ou seja, depende de um objeto para ser utilizado. Já o String.format é estático e pode ser chamado mesmo sem instanciarmos um objeto.
Resumo
Ao escrever aplicações complexas, não é recomendável combinar strings e variáveis apenas com o operador +. Os métodos printf() and format() foram criados especificamente para isso. Ambos funcionam exatamente da mesma maneira, exceto que o printf() imprime a saída enquanto o format() retorna um String.




