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 |
String[] messyProducts = {
"Eggplant ", // 结尾多余空白
"VEGETABLE OIL", // 大小写不一致
"Fresh (Organic) *Carrots*", // 含特殊字符
"Bell Pepper Fresh", // 词间多余空白
};
String[] products = {"Eggplant ", " Vegetable Oil", " Cheese "};
for (String product : products) {
String cleaned = product.trim(); // 去除首尾空白
System.out.println(cleaned);
}
Eggplant
Vegetable Oil
Cheese
List<String> products = Arrays.asList("Eggplant", "VEGETABLE OIL", "cheese");products.stream().map(String::toLowerCase) // 全部转为小写.forEach(System.out::println); // 逐个打印
eggplant
vegetable oil
cheese
[^a-zA-Z\\s]:匹配所有非字母或空白字符// 此模式匹配所有不是以下内容的字符:
[ // 开始字符集
^ // 取反——匹配不在集合内的任何字符
a-z // 任意小写字母
A-Z // 任意大写字母
\\s // 任意空白字符(Java 需额外 \\ 才能识别 \s)
] // 结束字符集
String dirtyName = "Fresh (Organic) *Carrots*"; // 特殊字符: (, ), *String cleaned = dirtyName.replaceAll("[^a-zA-Z\\s]", ""); // 移除非字母字符System.out.println(cleaned); // 输出: "Fresh Organic Carrots"
Fresh Organic Carrots
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
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);
eggplant
vegetable oil
fresh organic carrots
bell pepper fresh
Java 数据清洗