如何精确使用 Character.isWhitespace() 判断控制台输入字符是否为空格或制表符?
- 内容介绍
- 相关推荐
本文共计615个文字,预计阅读时间需要3分钟。
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
本文共计615个文字,预计阅读时间需要3分钟。
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

