Formatação Java com printf( ) e String.format( )
Um Guia Essencial para Formatação de Saída em Java
Introdução
Java fornece ferramentas poderosas e flexíveis para formatação de saída. Seja você imprimindo valores numéricos, strings ou até datas e horários, o método printf( ) e seu parente, o método String.format( ), oferecem uma ampla variedade de opções para controlar a aparência da sua saída. Este artigo explica os conceitos básicos do sistema de formatação do Java – incluindo sua string de formatação, flags, width, precision e conversion characters – e demonstra como usar esses recursos através de exemplos e um programa de exemplo.
Visão Geral do Método printf( )
Em Java, o método System.out.printf( ) escreve uma string formatada no console. Em sua forma mais simples, você pode usá-lo da seguinte maneira:
1 |
System.out.printf("String and format – string", arg1, arg2, …); |
Os elementos-chave deste método são a string de formatação e seus argumentos acompanhantes. A string de formatação inclui texto literal, bem como especificadores de formatação que indicam como cada argumento deve ser formatado.
Entendendo a String de Formatação
Uma string de formatação em Java é composta por dois componentes principais:
- Caracteres literais – estes são impressos exatamente como aparecem.
- Especificadores de formatação – estes definem como formatar os valores de dados passados como argumentos.
Cada especificador de formatação segue a seguinte sequência geral:
1 |
% {flags} {width} {.precision} conversion-character |
(Observação: Itens entre chaves são parâmetros opcionais.)
Componentes do Especificador de Formatação
-
Flags:
As flags personalizam a saída, e algumas das mais comumente usadas incluem:
• - : Alinha à esquerda a saída em vez da justificação à direita padrão.
• + : Inclui um sinal de mais para números positivos (sempre haverá um sinal de mais ou menos).
• 0 : Completa valores numéricos com zeros em vez de espaços.
• , : Utiliza um separador de agrupamento de vírgulas (útil para números maiores que 1000).
• (espaco) : Exibe um espaço em branco antes de números positivos, ou um sinal de menos para números negativos. -
Width:
O especificador de width define o número mínimo de caracteres a ser impresso. Este campo determina o espaço alocado para cada valor de saída. Ao formatar valores numéricos, certifique-se de considerar caracteres extras (como vírgulas ou pontos decimais). -
Precision:
A precision serve a diferentes propósitos dependendo do tipo de conversão. Para números de ponto flutuante, define o número de dígitos a serem exibidos após o ponto decimal; para strings, pode limitar o número de caracteres impressos. Em ambos os casos, os números podem ser arredondados de acordo com a precisão especificada. -
Conversion Characters:
Os conversion characters são usados para determinar o formato do tipo de dado. Exemplos incluem:
• d : Inteiro decimal (funciona com byte, short, int e long)
• f : Número de ponto flutuante (aplicável a float e double)
• c : Caractere (letra C maiúscula converte o caractere para maiúsculas)
• s : String (letra S maiúscula converte toda a string para maiúsculas)
• h : Código hash (útil para imprimir o valor de referência de um objeto)
• n : Nova linha (caractere de nova linha específico da plataforma; sempre use %n em vez de \n para portabilidade)
Por exemplo, considere estas duas instruções de impressão lidando com um valor de ponto flutuante armazenado em dblTotal:
1 2 |
System.out.printf("Total is: $%,.2f%n", dblTotal); System.out.printf("Total: %-10.2f", dblTotal); |
Usando String.format( )
Semelhante ao System.out.printf( ), o método String.format( ) permite que você crie uma string formatada que pode ser atribuída a uma variável. Seu uso é idêntico ao do printf( ). Por exemplo:
1 |
String grandTotal = String.format("Grand Total: %,.2f", dblTotal); |
Este recurso é particularmente útil quando você precisa armazenar ou manipular strings formatadas posteriormente, em vez de imprimi-las imediatamente.
Especificadores de Formatação Adicionais para Datas & Horas
O mecanismo de formatação do Java também suporta especificadores de conversão para datas e horas. Aqui estão alguns exemplos:
- tB – Nome completo do mês conforme o locale.
- td ou te – Dia do mês (com td incluindo um zero à esquerda, se necessário, enquanto te não inclui).
- ty ou tY – Ano (ty fornece um ano com dois dígitos e tY fornece um ano com quatro dígitos).
- tl – Hora no formato de relógio de 12 horas.
- tM – Minutos com dois dígitos (com zeros à esquerda quando necessário).
- tp – Indicador am/pm específico do locale (em minúsculas).
- tm – Mês como um valor de dois dígitos.
- tD – Data formatada como %tm%td%ty (por exemplo, “05/29/06”).
Outras construções importantes de formatação incluem:
• + : Sempre inclui um sinal (positivo ou negativo).
• , : Insere separadores de grupos específicos do locale.
• - : Alinha à esquerda a saída formatada.
• .3 : Exibe três dígitos após o ponto decimal.
• 10.3 : Aloca um campo com largura de dez caracteres com três dígitos após o ponto decimal e justificação à direita por padrão.
Um Programa de Exemplo
Para reunir todos esses conceitos, considere o seguinte programa Java de exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import java.util.Calendar; import java.util.Locale; public class TestFormat { public static void main(String[] args) { long n = 461012; System.out.format("%d%n", n); // --> "461012" System.out.format("%08d%n", n); // --> "00461012" System.out.format("%+8d%n", n); // --> " +461012" System.out.format("%,8d%n", n); // --> " 461,012" System.out.format("%+,8d%n%n", n); // --> "+461,012" double pi = Math.PI; System.out.format("%f%n", pi); // --> "3.141593" System.out.format("%.3f%n", pi); // --> "3.142" System.out.format("%10.3f%n", pi); // --> " 3.142" System.out.format("%-10.3f%n", pi); // --> "3.142 " System.out.format(Locale.FRANCE, "%-10.4f%n%n", pi); // --> "3,1416" Calendar c = Calendar.getInstance(); System.out.format("%tB %te, %tY%n", c, c, c); // e.g., "May 29, 2006" System.out.format("%tl:%tM %tp%n", c, c, c); // e.g., "2:34 am" System.out.format("%tD%n", c); // e.g., "05/29/06" } } |
Nota: No código do programa, quaisquer ocorrências de “<” e “>” foram substituídas por “<" e ">” respectivamente.
Destaques do Programa
- A formatação numérica demonstra tanto o preenchimento com zeros quanto a agrupação por vírgulas.
- A formatação de ponto flutuante mostra controle de precisão e alinhamento usando a largura do campo.
- A formatação de datas e horas utiliza caracteres de conversão para produzir saídas específicas do locale.
- Ao alternar entre locales (por exemplo, usando Locale.FRANCE), você pode controlar detalhes como o separador decimal.
Conclusão
Os métodos printf( ) e String.format( ) do Java oferecem aos desenvolvedores um controle extensivo sobre como os dados são apresentados. Desde a formatação simples de números até conversões mais complexas de datas e horas, essas ferramentas de formatação são essenciais para criar uma saída de console polida e legível. Ao dominar flags, width, precision e conversion characters, você pode ajustar sua saída para atender tanto aos requisitos funcionais quanto estéticos. Com inúmeros especificadores e opções integrados, as capacidades de formatação do Java ajudam a simplificar o processo de gerar interfaces de usuário ou logs claros e eficazes.
Feliz programação com os robustos recursos de formatação do Java!
Nota: Este artigo é gerado por AI.