简而言之:strip()
是“Unicode 感知”的演变trim()
。意义trim()
仅删除字符 strip()删除所有 Unicode 空白字符(但不是所有控制字符,例如 \0)
CSR:JDK-8200378 https://bugs.openjdk.java.net/browse/JDK-8200378
Problem
String::trim 从 Java 早期就存在,当时 Unicode
尚未完全发展到我们今天广泛使用的标准。
String::trim 使用的空间定义是小于任何代码点
大于或等于空格码点(\u0020),通常称为
作为 ASCII 或 ISO 控制字符。
Unicode 感知的修剪例程应该使用
字符::isWhitespace(int)。
此外,开发人员还无法专门删除
缩进空白或专门删除尾随空白
空间。
Solution
引入可识别 Unicode 空白的修剪方法
并提供仅前导或仅尾随的附加控制。
这些新方法的一个共同特征是,它们使用与旧方法(例如String.trim()
. Bug JDK-8200373 https://bugs.openjdk.java.net/browse/JDK-8200373.
当前 String::trim 的 JavaDoc 没有明确说明哪个
代码中使用了“空间”的定义。加上额外的
在不久的将来将会出现使用不同的修剪方法
空间的定义,澄清是必要的。 String::trim 用途
空间的定义为任何小于或等于的代码点
空格字符代码点(\u0020。)较新的修剪方法将
使用(空白)空间的定义作为返回 true 的任何代码点
当传递给 Character::isWhitespace 谓词时。
方法isWhitespace(char)
被添加到Character
使用 JDK 1.1,但是该方法isWhitespace(int)
没有被介绍到Character
JDK 1.5 之前的类。后一种方法(接受类型参数的方法int
添加 ) 以支持增补字符。 Javadoc 的评论Character
类定义补充字符(通常使用基于 int 的“代码点”建模)与 BMP 字符(通常使用单个字符建模):
有时指从 U+0000 到 U+FFFF 的字符集
作为基本多语言平面(BMP)。其代码点的字符
大于 U+FFFF 的字符称为增补字符。爪哇
平台在 char 数组和
String 和 StringBuffer 类。在本次陈述中,补充
字符表示为一对 char 值...一个 char 值,
因此,表示基本多语言平面 (BMP) 代码点,
包括 UTF-16 的代理代码点或代码单元
编码。 int 值代表所有 Unicode 代码点,包括
补充码点。 ...只接受字符的方法
值不支持增补字符。 ...方法
接受一个 int 值,支持所有 Unicode 字符,包括
补充字符。
OpenJDK 变更集 http://hg.openjdk.java.net/jdk/jdk/rev/92560438d306.
之间的基准比较trim()
and strip()
- 为什么 Java 11 中对于空白字符串 String.strip() 比 String.trim() 快 5 倍 https://stackoverflow.com/questions/53640184/why-is-string-strip-5-times-faster-than-string-trim-for-blank-string-in-java