在其他更改中,JDK 11 为 java.lang.String 类引入了 6 个新方法:
repeat(int)``int
lines()
isBlank()
stripLeading()
stripTrailing()
strip()
特别是,strip()看起来与 非常相似trim()。根据本文 strip*(),方法旨在:
trim()
strip*()
String.strip()、String.stripLeading() 和 String.stripTrailing() 方法从目标字符串的前面、后面或前面和后面修剪空白 [由 Character.isWhiteSpace() 确定]。
String.trim()JavaDoc 指出:
String.trim()
/** * Returns a string whose value is this string, with any leading and trailing * whitespace removed. * ... */
这几乎与上面的报价相同。
String.trim()Java 11和自 Java 11 以来到底有什么区别String.strip()?
String.strip()
简而言之:strip()是trim(). 含义trim()仅删除字符 <= U+0020(空格);strip()删除所有 Unicode 空白字符(但不是所有控制字符,例如 \0)
企业社会责任:JDK-8200378
问题
String::trim 从 Java 早期就已经存在,当时 Unicode
还没有完全发展到我们今天广泛使用的标准。 String::trim 使用的空格定义是任何小于或等于空格码点(\u0020)的码点,通常称为ASCII 或ISO 控制字符。 Unicode 感知修剪例程应使用 Character::isWhitespace(int)。 此外,开发人员无法专门删除缩进空格或专门删除尾随空格。 解决方案 引入可识别 Unicode 空白并提供仅前导或仅尾随的额外控制的修剪方法。
还没有完全发展到我们今天广泛使用的标准。
String::trim 使用的空格定义是任何小于或等于空格码点(\u0020)的码点,通常称为ASCII 或ISO 控制字符。
Unicode 感知修剪例程应使用 Character::isWhitespace(int)。
此外,开发人员无法专门删除缩进空格或专门删除尾随空格。
解决方案
引入可识别 Unicode 空白并提供仅前导或仅尾随的额外控制的修剪方法。
这些新方法的一个共同特点是,它们使用的“空白”定义与旧方法(例如String.trim(). 错误JDK-8200373。
当前用于 String::trim 的 JavaDoc 没有明确说明代码中使用了哪个“空间”定义。随着在不久的将来使用不同的空间定义的其他修剪方法,澄清是必要的。String::trim 将空格的定义用作小于或等于空格字符代码点 (\u0020) 的任何代码点。较新的修剪方法将使用(空白)空格的定义作为传递给时返回 true 的任何代码点Character::isWhitespace 谓词。
JDK 1.1isWhitespace(char)添加了该方法,但直到 JDK 1.5 才将该方法引入该类。添加了后一种方法(接受 type 参数的方法)以支持补充字符。该类的 Javadoc 注释定义了补充字符(通常使用基于 int 的“代码点”建模)与 BMP 字符(通常使用单个字符建模):Character``isWhitespace(int)``Character``int``Character
isWhitespace(char)
Character``isWhitespace(int)``Character``int``Character
从 U+0000 到 U+FFFF 的字符集有时称为基本多语言平面 (BMP)。码位大于 U+FFFF 的字符称为补充字符。Java 平台在 char 数组以及 String 和 StringBuffer 类中使用 UTF-16 表示。在此表示中,补充字符表示为一对 char 值……因此,char 值表示基本多语言平面 (BMP) 代码点,包括代理代码点或 UTF-16 编码的代码单元。一个 int 值表示所有 Unicode 代码点,包括补充代码点。… 只接受 char 值的方法不支持补充字符。…接受 int 值的方法支持所有 Unicode 字符,包括补充字符。
OpenJDK变更集。