Você está na página 1de 26

Saídas formatadas usando printf()

Saídas formatadas

• Há várias formas de formatar as saídas dos nossos programas, mas talvez a mais
fácil seja o uso da função (método, para usar o termo da Programação
Orientada aos Objetos) printf() da classe (outro termo fundamental da POO)
PrintStream e que é ainda mais fácil para quem já conhece uma função
semelhante da linguagem C.

2
Saídas formatadas

• Há três métodos (na prática, formas) de usar este método:

•System.out.printf(string);

•System.out.printf(formato, argumentos);

•System.out.printf(Locale, formato, argumentos);


3
Saídas formatadas

•System.out.printf(string);

•Este método acaba por ser igual ao System.out.print() em que queremos


escrever uma string como em System.out.print("Olá, fãs de Java!").

4
Saídas formatadas com especificadores de formato

•System.out.printf(formato, argumentos);

•Este método permite o uso de um formato para a saída usando especificadores


de formato.
•Especificamos os especificadores de formato usando o parâmetro formato. Este
parâmetro é a combinação de literais e especificadores, sempre a começar com o
caráter ‘%’.

5
Saídas formatadas de acordo com o país

•System.out.printf(locale, formato, argumentos);

•Um objeto Locale permite a especificação do país com as regras do qual


queremos escrever um número. Muito útil com números com casas decimais, como
já iremos ver.

6
Saídas formatadas com especificadores de formato
•Após o símbolo %, um especificador de formato inclui flags, largura, precisão e
carateres de conversão na sequência mencionada abaixo:

•%[flags][largura][.precisão]caráter de conversão

7
Saídas formatadas com especificadores de formato
• Todos os especificadores mencionados entre colchetes são opcionais. Mais comumente, um
especificador de formato consiste no símbolo % acompanhado de um caráter de conversão.

•Um caráter de conversão determina como o argumento será formatado.


• As <flags> definem as formas padrão de modificar a saída. Elas são mais comuns para formatar
números inteiros e de vírgula flutuante.
• A <largura> especifica o comprimento do campo para escrita do argumento. Representa o número
mínimo de carateres a serem impressos.
• A <.precisão> especifica o número de dígitos de precisão ao imprimir um valor de vírgula
flutuante. Também pode ser usado para definir o comprimento de uma substring de uma string.

8
Saídas formatadas de acordo com o país
• Sim, é possível, usando o parâmetro Locale e, eventualmente, a flag ',' para indicar o separador dos
milhares.

System.out.printf(Locale.US, "%,d %n", 12300);

System.out.printf(Locale.ITALY, "%,d %n", 10000);

•Levam às saídas

12,300

12.300

9
Saídas formatadas de acordo com o país
• E Portugal, vem no mapa da Java? Sim, se criarmos primeiro um objeto da classe
Locale para ele:
Locale paraPortugal = new Locale("pt", "PT");

System.out.printf(paraPortugal, "%,d %n", 10000);

Com saída
10 000

•Nota: para o português do Brasil, indicar new Locale("pt", "BR");


10
Saídas formatadas com especificadores de formato
• Caracteres mais usados:

%d Formatar números decimais (inteiros) (base 10)


%e Formatar números exponenciais de ponto flutuante
%f Formatar números de vírgula flutuante
%i Formatar números inteiros (base 10)
%o Formatar números octais (base 8)
%s Formatar sequência de caracteres
%u Formatar números decimais sem sinal (inteiros); 'u' é a inicial de 'unsigned'
%x Formatar números em hexadecimal (base 16)
%n Adiciona uma mudança de linha 11
Saídas formatadas com especificadores de formato
• Para formatar inteiros, devemos usa %d ('d' de 'decimal').

System.out.printf("temos aqui um inteiro: %d", 10000);

12
Saídas formatadas com especificadores de formato
• Para formatar números em vírgula flutuante, devemos usa %f ('f' de 'floating
point').
• Exemplo:

System.out.printf("%f", 3.1423);

Produz a saída:
3.142300
13
Saídas formatadas com especificadores de formato

• Como se pode ver, o número de casas decimais por padrão é sempre de 6 casas
decimais. Mas o número pode ser formatado usando o especificador de
precisão como neste exemplo:

System.out.printf("%3.2f", 3.1423);

• Agora, a largura mínima do nosso número flutuante será 3 e o comprimento da


parte decimal será 2, então a saída será:
3.14 14
Saídas formatadas com especificadores de formato
• Para termos a saída em forma de notação científica, podemos usar o caráter de
conversão ‘e’:

System.out.printf("%3.2e", 3.1423);

E esta será a saída:


3.15e+00

15
Saídas formatadas com especificadores de formato
• Quando se trata de formatar strings usando printf em Java, temos o
especificador %s.
• Geralmente, é combinado com outros especificadores dependendo dos requisitos
de formatação. Há mais coisas que se podem fazer com %s, como usar ‘%s’ para
colocar o argumento entre aspas simples ou colocar a string do argumento em
maiúscula, apenas usando ‘S’ maiúsculo em %S.

16
Saídas formatadas com especificadores de formato
• Vejamos estes exemplos:

System.out.printf("%s%n", "Olá Javistas!");


System.out.printf("'%S' %n", "Olá Javistas!");

E a saída será:

Olá Javistas!
'OLÁ JAVISTAS!'
17
Saídas formatadas com especificadores de formato
• Os especificadores opcionais que incluem largura, sinalizador e precisão também
podem ser usados ​para formatar a string. Para especificar um comprimento mínimo,
podemos especificar o comprimento da string usando o especificador de largura. Os
espaços em branco serão adicionados à esquerda da string se o comprimento da
string do argumento for menor que o comprimento mínimo.

System.out.printf("'%10s'", "Olá");

O que nos dá a saída:


' Olá' 18
Saídas formatadas com especificadores de formato
• O método printf() lida com valores de datas, horas e data-hora para formatação
de datas e horas. Os caracteres de conversão consistem em dois caracteres: t e T
acompanhados do sufixo de conversão, em que t formata horas e datas e T
especificamente horas.

19
Saídas formatadas com especificadores de formato
• Para formatar uma hora usando Java Printf, são usados os caracteres H, M e S ​para extrair
as horas, minutos e segundos do valor de data de entrada.
• Os caracteres L e N representam o tempo em milissegundos e nanossegundos,
respetivamente. O caráter p é usado para adicionar a formatação am/pm e, por último, z
imprime o deslocamento do fuso horário.

• O tipo da variável data e hora consiste no tipo completo data e hora da classe Date. A
formatação da hora é usada para fazer imprimir a parte da hora que vem da data. Exemplo:

20
Saídas formatadas com especificadores de formato

•Vejamos este trecho de código abaixo:

Date data = new Date();


System.out.printf("%tT", data);

Essas linhas de código fornecerão a seguinte saída:


12:14:46

21
Saídas formatadas com especificadores de formato
• Este é um formato simples para hora, mas se precisarmos alterar ainda mais o formato,
diferentes segmentos de tempo também podem ser extraídos separadamente usando os
caracteres mencionados anteriormente:

System.out.printf("horas: %tH%n minutos: %tM%n segundos: %tS%n", data, data, data);

A saída será:
horas: 13
minutos: 51
segundos: 15
22
Saídas formatadas com especificadores de formato
• Para formatar um booleano, devemos usar %b, como no exemplo seguinte:
public static void main(String[] args) {
boolean adulto = true;
boolean membro = false;
System.out.printf(“%b%n”, adulto);
System.out.printf("%b", membro);
}
Com a saída
true
false 23
Saídas formatadas com especificadores de formato

• Semelhante à formatação de hora, existem alguns caracteres de formatação especiais usados ​


para formatar datas:

Uso de caracteres:
A imprime o dia inteiro da semana.
d formata um dia do mês com dois dígitos.
B imprime o nome completo do mês.
m formata um mês de dois dígitos.
Y gera o ano em quatro dígitos.
y gera os dois últimos dígitos do ano. 24
Saídas formatadas com especificadores de formato
• Usando esses caracteres, esta linha de código:

System.out.printf("%1$tA, %1$tB %1$tY", data);

Irá gerar a data assim:

Monday, November 2023

25
Saídas formatadas com especificadores de formato
• E para ter sua data em formato totalmente numérico, separada por ‘-’, podemos
escrever o código assim:

System.out.printf("%1$td-%1$tm-%1$ty", data);

E a saída será:
13-11-23

26

Você também pode gostar