character.iswhitespace()依据unicode标准识别空格、制表符、换行符、回车符、垂直制表符、换页符及不间断空格等空白字符,但不包括中文全角空格(u+3000)和null字符;控制台输入中换行/回车已被消耗,实际字符串通常只含空格、制表符等;使用前须判空防npe。

Character.isWhitespace() 能准确识别空格、制表符、换行符、回车符等多种 Unicode 空白字符,但要注意:它**不只判断空格和制表符**,且**对控制台输入需结合读取方式谨慎使用**。
它识别哪些字符?
该方法依据 Unicode 标准判定“空白”(whitespace),包括但不限于:
- 空格(U+0020)
- 水平制表符 '\t'(U+0009)
- 换行符 '\n'(U+000A)
- 回车符 '\r'(U+000D)
- 垂直制表符 '\u000B'
- 换页符 '\f'(U+000C)
- Unicode 中其他语义为空白的字符(如不间断空格 U+00A0、零宽空格 U+200B 等)
控制台输入时的关键细节
从控制台读取字符串(如用 Scanner.nextLine() 或 BufferedReader.readLine())时,换行符 '\n' 和回车符 '\r' 不会出现在返回的字符串中——它们被作为行结束符消耗掉了。因此:
- 你实际拿到的字符串里,通常只有空格 ' '、制表符 '\t',以及可能的其他空白(如用户粘贴进来的不间断空格)
- 直接遍历字符串每个 char 并调用 Character.isWhitespace(c) 是安全且有效的
- 若需严格只认空格和制表符(排除换行等),就不要依赖 isWhitespace(),改用 c == ' ' || c == '\t'
实用示例:检查用户输入是否“全为空白”
比如判断一行输入是否实质为空(仅含空格/制表符等):
String input = scanner.nextLine().trim(); // 先 trim 去首尾空白再判断更直观
if (input.isEmpty()) {
System.out.println("输入为空或全空白");
}
或者逐字符检查(更底层,适合自定义逻辑):
String s = scanner.nextLine();
boolean hasNonWhitespace = false;
for (char c : s.toCharArray()) {
if (!Character.isWhitespace(c)) {
hasNonWhitespace = true;
break;
}
}
if (!hasNonWhitespace) {
System.out.println("整行都是空白字符");
}
注意边界情况
- null 字符串不能传入:调用前务必判空,否则抛 NullPointerException
- 中文全角空格(U+3000)不是 whitespace:Character.isWhitespace('\u3000') 返回 false;如需支持,需额外判断
- 不可见控制字符(如 U+0000)不属于 whitespace,isWhitespace 返回 false










