Normalização de strings

Limpeza de Dados em Java

Dennis Lee

Software Engineer

Dataset de estoque de mercearia

  • Trabalhe com um dataset de estoque de mercearia ao longo do capítulo
  • Modifique colunas como nome do produto para ilustrar transformações

 

Product Name Category Status Date Received Quantity
Eggplant Fruits & Vegetables Discontinued 3/1/25 46
VEGETABLE OIL Oils & Fats Backordered 4/1/25 51
Cheese Dairy Active 6/1/25 78
Fresh (Organic) *Carrots* Fruits & Vegetables Discontinued 5/1/25 51
Bell Pepper Fresh Fruits & Vegetables Active 5/2/25 67
Limpeza de Dados em Java

Por que normalizar strings importa

  • Strings bagunçadas: o computador não reconhece bem
  • Exemplo: estoque de supermercado
  • Solução: normalizar strings

 

String[] messyProducts = {
    "Eggplant ",              // Espaço extra no fim
    "VEGETABLE OIL",             // Caixa inconsistente
    "Fresh (Organic) *Carrots*", // Caracteres especiais
    "Bell   Pepper    Fresh",    // Espaços extras entre palavras
};
Limpeza de Dados em Java

Removendo espaços nas bordas

String[] products = {"Eggplant ", "  Vegetable Oil", " Cheese "};
for (String product : products) {
    String cleaned = product.trim(); // Remove espaços no início/fim
    System.out.println(cleaned);
}
Eggplant
Vegetable Oil
Cheese
Limpeza de Dados em Java

Padronizando a caixa do texto

List<String> products = Arrays.asList("Eggplant", "VEGETABLE OIL", "cheese");

products.stream()
.map(String::toLowerCase) // Converte tudo para minúsculas
.forEach(System.out::println); // Imprime cada produto
eggplant
vegetable oil
cheese
Limpeza de Dados em Java

Padrões de regex

  • Expressões regulares (regex): padrões especiais que casam texto$^1$
  • [^a-zA-Z\\s]: Encontra qualquer caractere que não seja letra ou espaço
// Esse padrão corresponde a qualquer caractere que NÃO seja:
[       // Início do conjunto
^       // NÃO - casa o que não está no conjunto
a-z     // qualquer letra minúscula
A-Z     // qualquer letra maiúscula
\\s     // qualquer caractere de espaço em branco (precisa de \\ para o Java interpretar \s)
]       // Fim do conjunto

1 https://www.datacamp.com/cheat-sheet/regular-expresso
Limpeza de Dados em Java

Limpando caracteres especiais

String dirtyName = "Fresh (Organic) *Carrots*"; // Caracteres especiais: (, ), *

String cleaned = dirtyName.replaceAll("[^a-zA-Z\\s]", ""); // Remove não-letras
System.out.println(cleaned); // Saída: "Fresh Organic Carrots"
Fresh Organic Carrots
Limpeza de Dados em Java

Limpando múltiplos espaços

import java.util.regex.Pattern;
Pattern pattern = Pattern.compile("\\s+"); // Captura vários espaços

String messyProduct = "Bell Pepper Fresh"; // Contém espaços extras // Substitui múltiplos espaços por um único String cleanedProduct = pattern.matcher(messyProduct).replaceAll(" ");
System.out.println(cleanedProduct);
Bell Pepper Fresh
Limpeza de Dados em Java

Juntando tudo

List<String> messyProducts = Arrays.asList(
        "Eggplant ", "VEGETABLE OIL",
        "Fresh (Organic) *Carrots*", "Bell   Pepper    Fresh"
); // Nomes extraídos do nosso dataset de estoque

messyProducts.stream()
        .map(s -> s.trim()                       // Remove espaços nas bordas
                .replaceAll("[^a-zA-Z\\s]", "")  // Remove especiais
                .replaceAll("\\s+", " ")         // Corrige espaços internos
                .toLowerCase())                  // Padroniza caixa
        .forEach(System.out::println);
Limpeza de Dados em Java

Juntando tudo: saídas

eggplant
vegetable oil
fresh organic carrots
bell pepper fresh
Limpeza de Dados em Java

Vamos praticar!

Limpeza de Dados em Java

Preparing Video For Download...