AFF Education Construa seu Futuro

Aula 21 - Especificadores de Formato

Especificadores de Formato

Os especificadores de formato são marcadores especiais que indicam como diferentes tipos de dados devem ser apresentados no texto. Eles sempre começam com o símbolo % e são substituídos pelos valores reais durante a execução.

O especificador %s representa uma variável string.

Os especificadores de formato são usados principalmente com o método printf e o método format para controlar como os dados são exibidos.

Método printf vs println

Vejamos as diferenças entre o método printf e o método println:

public class EspecificadoresFormato {
    public static void main(String[] args) {
        String nome = "Ana";
        int idade = 25;
        
        // Usando println (imprime na tela e pula uma linha)
        System.out.println("Olá, meu nome é " + nome + " e tenho " + idade + " anos.");
        
        // Usando printf com especificadores de formato
        System.out.printf("Olá, meu nome é %s e tenho %d anos.", nome, idade);
        
        // Observe que printf não pula linha automaticamente
        // Para pular linha com printf, use \n
        System.out.printf("\nOutra mensagem usando printf com quebra de linha.\n");
        
        // Mais um exemplo com printf
        System.out.printf("Nome: %s, Idade: %d\n", nome, idade);
    }
}

Olá, meu nome é Ana e tenho 25 anos.

Olá, meu nome é Ana e tenho 25 anos.

Outra mensagem usando printf com quebra de linha.

Nome: Ana, Idade: 25

Dica: Repare que o println imprime na tela e pula uma linha, mas o printf imprime na tela e não pula uma linha. Para pular linha com o printf, use o caractere de escape \n.

Principais Especificadores de Formato

1. %s (String)

Usado para representar uma string (texto).

String nome = "Carlos";
System.out.printf("Nome: %s\n", nome);
Nome: Carlos

Exemplo Mais Completo

Vamos ver um exemplo mais detalhado do uso de especificadores de formato:

public class ExemploFormatacao {
    public static void main(String[] args) {
        String nome = "João";
        int idade = 30;
        double altura = 1.75;
        
        // Usando System.out.println (concatenação tradicional)
        System.out.println("Nome: " + nome);
        System.out.println("Idade: " + idade);
        System.out.println("Altura: " + altura);
        
        System.out.println(); // Linha em branco
        
        // Usando System.out.printf com especificadores de formato
        System.out.printf("Nome: %s\n", nome);
        System.out.printf("Idade: %d\n", idade);
        System.out.printf("Altura: %.2f\n", altura);
        
        System.out.println(); // Linha em branco
        
        // Combinando múltiplos especificadores em uma única chamada
        System.out.printf("Olá, meu nome é %s, tenho %d anos e minha altura é %.2f metros.\n", 
                         nome, idade, altura);
        
        // Usando format (semelhante ao printf, mas retorna uma String)
        String mensagem = String.format("Ficha: %s, %d anos, %.2f m", nome, idade, altura);
        System.out.println(mensagem);
    }
}

Nome: João

Idade: 30

Altura: 1.75

Nome: João

Idade: 30

Altura: 1.75

Olá, meu nome é João, tenho 30 anos e minha altura é 1.75 metros.

Ficha: João, 30 anos, 1.75 m

Exemplo com Formatação de Produtos

Vamos ver outro exemplo com a formatação de produtos em uma lista:

public class FormatacaoProdutos {
    public static void main(String[] args) {
        // Informações de produtos
        String produto1 = "Café";
        int quantidade1 = 2;
        double preco1 = 9.99;
        
        String produto2 = "Açúcar";
        int quantidade2 = 1;
        double preco2 = 3.50;
        
        String produto3 = "Pão";
        int quantidade3 = 5;
        double preco3 = 0.75;
        
        // Imprimindo cabeçalho da lista
        System.out.println("LISTA DE COMPRAS");
        System.out.println("-------------------------");
        System.out.println("Produto | Qtd | Preço unitário");
        System.out.println("-------------------------");
        
        // Imprimindo produtos com println (menos organizado)
        System.out.println(produto1 + " | " + quantidade1 + " | R$ " + preco1);
        System.out.println(produto2 + " | " + quantidade2 + " | R$ " + preco2);
        System.out.println(produto3 + " | " + quantidade3 + " | R$ " + preco3);
        
        System.out.println("\nCom formatação adequada:");
        System.out.println("-------------------------");
        
        // Usando printf para melhor formatação
        System.out.printf("%-10s | %3d | R$ %5.2f\n", produto1, quantidade1, preco1);
        System.out.printf("%-10s | %3d | R$ %5.2f\n", produto2, quantidade2, preco2);
        System.out.printf("%-10s | %3d | R$ %5.2f\n", produto3, quantidade3, preco3);
        
        // Calculando total
        double total = (quantidade1 * preco1) + (quantidade2 * preco2) + (quantidade3 * preco3);
        System.out.println("-------------------------");
        System.out.printf("Total: R$ %.2f\n", total);
    }
}

LISTA DE COMPRAS

-------------------------

Produto | Qtd | Preço unitário

-------------------------

Café | 2 | R$ 9.99

Açúcar | 1 | R$ 3.5

Pão | 5 | R$ 0.75

Com formatação adequada:

-------------------------

Café | 2 | R$ 9.99

Açúcar | 1 | R$ 3.50

Pão | 5 | R$ 0.75

-------------------------

Total: R$ 27.23

Exercícios

Teste seus conhecimentos sobre especificadores de formato em Java:

1. Qual especificador de formato é usado para representar uma String?

2. Qual a diferença entre System.out.println() e System.out.printf()?

3. Como fazer o printf pular para a próxima linha após imprimir?

4. Complete o código para imprimir "Nome: Ana, Idade: 25" usando printf:

String nome = "Ana";
int idade = 25;
System.out.printf("____________", ____________);

5. O que acontece se o número de especificadores de formato for maior que o número de variáveis fornecidas?

Exercícios de Aplicação AFF Education

Reforce o conteúdo desta aula com mais dois exercícios práticos:

1. Qual especificador de formato em printf exibe um número de ponto flutuante?

2. Qual a saída de System.out.printf("%.2f", 3.14159);?