java - 为什么 Java 不能识别这些空格?
问题描述
空白有25 种类型。Character.isWhitespace(char)
在下面的代码中显示了 25 种类型中的四种在 Java 中不被视为空白。为什么 ?
public class Main {
public static void main(String...args){
char [] whiteSpaces = {'\u0085', '\u00A0', '\u2007', '\u202F'};
for(char space : whiteSpaces){
//All spaces are not white spaces in Java.
System.out.println("[" + space + "] is a white space in Java:" + Character.isWhitespace(space));
}
}
}
参考-https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Character.html#isWhitespace(char)
解决方案
为什么?因为这就是指定该方法的方式。javadoc forisWhiteSpace
列出了它匹配的代码。您确定的 4 不在列表中。
我们不能告诉你为什么它是这样定义的。 但是,javadoc 所说的一个含义是'\u00A0'
,'\u2007'
并且'\u202F'
被排除在外,因为它们是不间断的空白字符。
'\u0085'
或者NEL
是一个有趣的案例。根据 Unicode 代码表(请参阅此处获取非官方摘要),它不是一般类别 SPACE_SEPARATOR、LINE_SEPARATOR 或 PARAGRAPH_SEPARATOR 的成员。(它显示在 CONTROL 类别中。)
如果您想要一种能够识别所有 Unicode 空白字符(即 SPACE_SEPARATOR、LINE_SEPARATOR 或 PARAGRAPH_SEPARATOR 中的字符)的方法,您应该使用isSpaceChar
( javadoc ) 而不是isWhiteSpace
.
请注意,Unicode 规范并不是一成不变的。代码的分类,实际上是“空白”的定义随着时间的推移而演变。每个Java 版本都实现了一个特定版本的 Unicode 规范,该规范在发布时是最新的。例如:
- Java 8 实现了 Unicode 6.2
- Java 11 实现了 Unicode 10.0.0
- Java 13 实现了 Unicode 12.1
Character
详细信息在每个 Java 版本的类的 javadoc 中。请注意,给定的 Java 版本未修补以跟踪后续的 Unicode 版本。
底线是“空白”是一个相当模糊的概念。如果你想要一个实现特定含义的方法,你可能需要自己实现它。
推荐阅读
- python - 我的 Python Flask-SocketIO webapp 没有在 Heroku 上运行
- ms-access - Ms Access 查询获取总和
- android - 使用界面将 EditText 从一个片段更新到另一个片段
- css - 我的媒体查询未按预期更改
- spring - 在 MongoDB for Spring 中的 @DBref 列表项中查找/删除
- php - 如何检查 PHP $_POST 点击了哪个单选按钮?
- firebase - 个人或特定用户的 Firebase 屏幕视图分析
- php - 监视数据库并等待 laravel 中的更改
- git - 如何确保同意 Mac OS mojave 上的 VS CODE 源代码控制模块 (SCM) 中的 GIT 许可协议?
- android - 找不到aapt2 proto jar