java - Java 11 中 String trim() 和 strip() 方法的区别
问题描述
在其他更改中,JDK 11 为 java.lang.String 类引入了 6 个新方法:
repeat(int)
int
- 根据参数提供的多次重复字符串lines()
- 使用 Spliterator 懒惰地提供源字符串中的行isBlank()
- 指示字符串是否为空或仅包含空格字符stripLeading()
- 从头开始删除空白stripTrailing()
- 从末尾删除空白strip()
- 从字符串的开头和结尾删除空格
特别是,strip()
看起来与 非常相似trim()
。根据本文 strip*()
,方法旨在:
String.strip()、String.stripLeading() 和 String.stripTrailing() 方法从目标字符串的前面、后面或前面和后面修剪空白 [由 Character.isWhiteSpace() 确定]。
String.trim()
JavaDoc 指出:
/**
* Returns a string whose value is this string, with any leading and trailing
* whitespace removed.
* ...
*/
这几乎与上面的报价相同。
String.trim()
Java 11和自 Java 11 以来到底有什么区别String.strip()
?
解决方案
简而言之:strip()
是trim()
. 含义trim()
仅删除字符 <= U+0020(空格);strip()
删除所有 Unicode 空白字符(但不是所有控制字符,例如 \0)
问题
String::trim 从 Java 早期就已经存在,当时 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
从 U+0000 到 U+FFFF 的字符集有时称为基本多语言平面 (BMP)。码位大于 U+FFFF 的字符称为补充字符。Java 平台在 char 数组以及 String 和 StringBuffer 类中使用 UTF-16 表示。在此表示中,补充字符表示为一对 char 值……因此,char 值表示基本多语言平面 (BMP) 代码点,包括代理代码点或 UTF-16 编码的代码单元。一个 int 值表示所有 Unicode 代码点,包括补充代码点。... 只接受 char 值的方法不支持补充字符。...接受 int 值的方法支持所有 Unicode 字符,包括补充字符。
OpenJDK变更集。
trim()
和之间的基准比较strip()
-为什么 String.strip() 比 String.trim() 在 Java 11 中的空白字符串快 5 倍
推荐阅读
- google-data-studio - 此时分区数大于 BI 引擎支持的 Google Data Studio BI 引擎问题
- google-sheets - 具有 LEN 和更多条件的 COUNTIFS
- jmeter - 我在 Jmeter 中添加了堆大小,但仍然出现 OOM 错误
- r - 启动新的 RSelenium 服务器时出错
- java - 如何将 gradle 指向可以具有不同路径的本地依赖项?
- python - 单击按钮 FLASK 时显示通知
- javascript - 我怎样才能返回假?
- javascript - 从获取的数据中显示一个属性 React native
- python-3.x - 使用 win32wnet 导入时使用 cx_freeze 编译后的 DLL 问题
- java - 将 XML 解析为 TextView:android