Character.isWhitespace()仅判断单个字符是否为Unicode空白,不处理逻辑空白或自动归一化;它识别ASCII空格、制表符、换行符、回车符、换页符及多种Unicode空白字符。

Character.isWhitespace() 可以识别 Unicode 定义的各类空白字符,但**它不处理字符串中由多个空格、制表符、换行符等组合形成的“逻辑空白”**,也不自动修剪或归一化。它只对单个 char(或 int 码点)做判断。
哪些字符被判定为 whitespace
该方法返回 true 的包括:
- ASCII 空格(U+0020)
- 水平制表符
'\t'(U+0009) - 换行符
'\n'(U+000A)、回车符'\r'(U+000D) - 换页符
'\f'(U+000C) - Unicode 中的其他空白:如不间断空格(U+00A0)、零宽空格(U+200B)、字节顺序标记(U+FEFF)、各种全角/半角空格(如 U+3000)等
变量字符串中常见陷阱
直接对字符串调用 isWhitespace() 不可行——它只接受单个字符。常见误用:
-
Character.isWhitespace(str)❌ 编译失败(类型不匹配) -
str.chars().allMatch(Character::isWhitespace)✅ 判断整个字符串是否全为空白 -
str.chars().anyMatch(Character::isWhitespace)✅ 判断是否含任意空白字符 - 注意:
str.trim().isEmpty()更常用且语义清晰,但它只移除首尾 ASCII 空白(不包含 U+00A0、U+200B 等),而isWhitespace覆盖更广
安全检查变量字符串中的空白
若需严格按 Unicode 规范检测并清理,推荐组合使用:
- 用
str.codePoints().allMatch(Character::isWhitespace)判断是否全为 Unicode 空白(支持代理对,比chars()更健壮) - 用
str.codePoints().filter(c -> !Character.isWhitespace(c)).count() == 0同样可靠 - 清理时慎用
trim();可自定义:str.codePoints().filter(c -> !Character.isWhitespace(c)).collect(StringBuilder::new, (sb, c) -> sb.appendCodePoint(c), StringBuilder::append).toString()(保留非空白字符)
实际建议
多数业务场景下:
- 验证输入是否“实质为空”:优先用
str.codePoints().allMatch(Character::isWhitespace) - 去首尾空白且兼容 Unicode:用
str.strip()(Java 11+),它基于isWhitespace实现 - 仅需 ASCII 兼容性:
trim()足够快且简洁 - 日志或调试时排查隐藏空白:打印码点
str.codePoints().forEach(System.out::println)










