空值检测

Java 数据清洗

Dennis Lee

Software Engineer

数据在哪里?

  • 缺失数据:null 与空白
    • Null:数据不可用
    • 空白:空格等,可能是错误

 

书名 发布日期 评分 评论数 价格
Python Crash Course 1/10/23 4.8 165 $30.61
9/13/19 4.8 2,521 $38.00
Clean Code 8/1/08 [null] [null] [null]
Java 数据清洗

来自 null 的错误

// book 缺少 reviewCount、rating 和 price
BookSales book = new BookSales("Clean Code", LocalDate.of(2008, 8, 1),
                               null, null, null)


// rating 为 null,会抛出 NullPointerException int rating = book.rating();
Exception in thread "main" java.lang.NullPointerException
Java 数据清洗

检查 null 值

// 导入 Objects
import java.util.Objects;
// 使用 .isNull()
if (Objects.isNull(book.rating())) {
    System.out.println("缺少评分");
}
缺少评分
Java 数据清洗

为 null 提供默认值

import java.util.Optional;
// 数值用 Optional.ofNullable
double rating = Optional.ofNullable(book.rating()).orElse(0.0);
System.out.println("Book rating: " + rating);
Book rating: 0.0
// 字符串用 Objects.toString
String displayTitle = Objects.toString(book.title(), "[No Title]");
System.out.println(displayTitle);
Book title: [No Title]
Java 数据清洗

检查空白/空字符串

import org.apache.commons.lang3.StringUtils;  // 字符串工具
// book 的标题缺失
BookSales book = new BookSales(" ", LocalDate.of(2019, 9, 13), 2521, 4.5, 38.00)


if StringUtils.isBlank(book.title()) { System.out.println("无效——标题为空"); }
无效——标题为空
Java 数据清洗

检查空白数字

// priceText 为空白
String priceText = " ";

// 转为数字前先检查空白
if StringUtils.isBlank(priceText) {
    System.out.println("无效价格:检测到空白");
}
无效价格:检测到空白
Java 数据清洗

总结:检测 null 与空白

  • Null 表示数据缺失或未定义
    • 关键导入:java.util.Objectsjava.util.Optional
    • 使用前先检查 null,避免 NullPointerException
    • Objects.isNull() 检查 null
    • Optional.ofNullable() 提供默认值
  • Blank 表示空或仅空白字符的文本
    • 关键导入:org.apache.commons.lang3.StringUtils
    • StringUtils.isBlank() 检测 ""、null 或空白
    • 常见于数据录入错误
Java 数据清洗

Passons à la pratique !

Java 数据清洗

Preparing Video For Download...