字符串规范化

Java 数据清洗

Dennis Lee

Software Engineer

杂货库存数据集

  • 本章全程使用杂货库存数据集
  • 修改产品名称等列,展示数据转换

 

产品名称 类别 状态 收货日期 数量
Eggplant 水果和蔬菜 已下架 3/1/25 46
VEGETABLE OIL 油脂 延期交付 4/1/25 51
Cheese 乳制品 有效 6/1/25 78
Fresh (Organic) *Carrots* 水果和蔬菜 已下架 5/1/25 51
Bell Pepper Fresh 水果和蔬菜 有效 5/2/25 67
Java 数据清洗

为何要进行字符串规范化

  • 脏字符串:计算机无法识别文本
  • 示例:杂货店库存
  • 方案:规范化字符串

 

String[] messyProducts = {
    "Eggplant ",              // 结尾多余空白
    "VEGETABLE OIL",             // 大小写不一致
    "Fresh (Organic) *Carrots*", // 含特殊字符
    "Bell   Pepper    Fresh",    // 词间多余空白
};
Java 数据清洗

去除首尾空白

String[] products = {"Eggplant ", "  Vegetable Oil", " Cheese "};
for (String product : products) {
    String cleaned = product.trim(); // 去除首尾空白
    System.out.println(cleaned);
}
Eggplant
Vegetable Oil
Cheese
Java 数据清洗

统一大小写格式

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

products.stream()
.map(String::toLowerCase) // 全部转为小写
.forEach(System.out::println); // 逐个打印
eggplant
vegetable oil
cheese
Java 数据清洗

正则表达式模式

  • 正则表达式(regex):用于匹配文本的特殊模式$^1$
  • [^a-zA-Z\\s]:匹配所有非字母或空白字符
// 此模式匹配所有不是以下内容的字符:
[       // 开始字符集
^       // 取反——匹配不在集合内的任何字符
a-z     // 任意小写字母
A-Z     // 任意大写字母
\\s     // 任意空白字符(Java 需额外 \\ 才能识别 \s)
]       // 结束字符集

1 https://www.datacamp.com/cheat-sheet/regular-expresso
Java 数据清洗

清理特殊字符

String dirtyName = "Fresh (Organic) *Carrots*"; // 特殊字符: (, ), *

String cleaned = dirtyName.replaceAll("[^a-zA-Z\\s]", ""); // 移除非字母字符
System.out.println(cleaned); // 输出: "Fresh Organic Carrots"
Fresh Organic Carrots
Java 数据清洗

清理多余空格

import java.util.regex.Pattern;
Pattern pattern = Pattern.compile("\\s+"); // 匹配多个空格

String messyProduct = "Bell Pepper Fresh"; // 含多余空格 // 将多个空格替换为一个空格 String cleanedProduct = pattern.matcher(messyProduct).replaceAll(" ");
System.out.println(cleanedProduct);
Bell Pepper Fresh
Java 数据清洗

综合应用

List<String> messyProducts = Arrays.asList(
        "Eggplant ", "VEGETABLE OIL",
        "Fresh (Organic) *Carrots*", "Bell   Pepper    Fresh"
); // 来自杂货库存数据集的产品名

messyProducts.stream()
        .map(s -> s.trim()                       // 去除首尾空格
                .replaceAll("[^a-zA-Z\\s]", "")  // 移除特殊字符
                .replaceAll("\\s+", " ")         // 规范内部空格
                .toLowerCase())                  // 统一大小写
        .forEach(System.out::println);
Java 数据清洗

综合应用:输出

eggplant
vegetable oil
fresh organic carrots
bell pepper fresh
Java 数据清洗

开始练习吧!

Java 数据清洗

Preparing Video For Download...