当前位置: 首页 > 面试题库 >

Java 11中String trim()和strip()方法之间的区别

裴凯定
2023-03-14
问题内容

在其他更改中,JDK 11为java.lang.String类引入了6种新方法:

  • repeat(int)-重复字符串多次通过所提供的int参数
  • lines() -使用分隔符从源字符串懒惰地提供行
  • isBlank() -指示字符串是否为空或仅包含空格字符
  • stripLeading() -从开头删除空白
  • stripTrailing() -从末端去除空白
  • strip() -删除字符串开头和结尾的空格

尤其strip()看起来与十分相似trim()。按照本文的规定, strip*()方法旨在:

String.strip(),String.stripLeading()和String.stripTrailing()方法从目标String的正面,背面或正面和背面修剪空白[由Character.isWhiteSpace()确定)。

String.trim() JavaDoc指出:

/**
  * Returns a string whose value is this string, with any leading and trailing
  * whitespace removed.
  * ...
  */

这几乎与上面的引用相同。

String.trim()String.strip()Java 11以来的区别到底是什么?


问题答案:

简而言之:strip()是的“支持Unicode的”演变trim()

企业社会责任:JDK-8200378

问题

String :: trim从Java的早期开始就存在,当时Unicode尚未完全发展为我们今天广泛使用的标准。

String :: trim使用的空格定义是小于或等于空格代码点(\ u0020)的任何代码点,通常称为ASCII或ISO控制字符。

支持Unicode的修剪例程应使用Character :: isWhitespace(int)。

此外,开发人员无法专门删除缩进空格或专门删除尾随空格。

介绍可识别Unicode空白的修整方法,并提供仅前导或仅尾随的附加控制。

这些新方法的一个共同特点是,它们使用的旧方法(例如)使用不同的(较新的)“空白”定义String.trim()。错误JDK-8200373。

当前的JavaDoc for String ::
trim尚不清楚代码中使用了哪个“空格”定义。随着不久的将来使用不同空间定义的其他修剪方法,必须进行澄清。String ::
trim使用空格的定义作为小于或等于空格字符代码点(\
u0020)的任何代码点。较新的修整方法将使用(white)空格的定义作为传递给参数时返回true的任何代码点。字符:: isWhitespace谓词。


该方法isWhitespace(char)是在CharacterJDK 1.1中添加的,但是直到JDK
1.5才将该方法isWhitespace(int)引入到Character类中。添加了后一种方法(接受类型参数的方法int)以支持补充字符。Character该类的Javadoc注释定义了补充字符(通常以基于int的“代码点”为模型)与BMP字符(通常以单个字符为模型):

从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()-



 类似资料:
  • 问题内容: 我知道,无论与就将计算在东西在AngularJS变化。但是无法理解两者之间到底有什么区别。 我最初的理解是为角表达式计算的,这些角表达式是HTML端在执行函数时所执行的条件。我的想法是否正确? 问题答案: $observe() 是Attributes对象上的一种方法,因此,它只能用于观察/监视DOM属性的值更改。仅用于/调用内部指令。当您需要观察/观察包含插值的DOM属性(即{{}})

  • 问题内容: 我在阅读PEP 0008(样式指南)时,发现它建议在实例方法中使用self作为第一个参数,而在类方法中使用cls作为第一个参数。 我已经使用并编写了一些类,但从未遇到过类方法(嗯,一种将cls作为参数传递的方法)。有人可以告诉我一些例子吗? 谢谢! 问题答案: 实例方法 创建实例方法时,第一个参数始终为。您可以随意命名,但含义始终相同,并且由于其是命名约定,因此应使用。 (通常)在调用

  • 本文向大家介绍C#中的方法重写和方法隐藏之间的区别,包括了C#中的方法重写和方法隐藏之间的区别的使用技巧和注意事项,需要的朋友参考一下 在C#中,有两种机制可以通过其子类重新定义或提供父类方法的新实现,这两种机制被称为“方法重写”和“方法隐藏”。现在,基于重新实现方法的方式,我们可以区分两者。 以下是方法重写和方法隐藏之间的重要区别。 序号 键 方法覆盖 方法隐藏 1 定义 方法重写是一种实现多态

  • 问题内容: 用修饰的功能和用修饰的功能有什么区别? 问题答案: 也许有点示例代码将有助于:发现其中的差别在调用签名,并且: 以下是对象实例调用方法的常用方法。对象实例,a作为第一个参数隐式传递。 使用时,对象实例的类作为第一个参数而不是隐式传递。 你也可以使用该类进行呼叫。实际上,如果你将某些东西定义为类方法,则可能是因为你打算从类而不是从类实例调用它。本来会引发,但效果很好: 人们发现类方法的一

  • 问题内容: 之间有什么区别 和 问题答案: 在Django的查询集文档都对这个很清楚的: 返回与给定查找参数匹配的对象,该参数应采用“字段查找”中所述的格式。 如果找到多个对象,则get()会引发MultipleObjectsReturned。MultipleObjectsReturned异常是模型类的属性。 如果找不到给定参数的对象,则get()会引发DidNotExist异常。此异常也是模型类

  • 问题内容: 你能否通过基本示例告诉我何时使用这些矢量化方法? 我看到这是一种方法,而其余都是方法。我糊涂了约和,虽然方法。为什么我们有两种将函数应用于DataFrame的方法?同样,简单的例子可以很好地说明用法! 问题答案: 另一个常见的操作是将一维数组上的函数应用于每一列或每一行。DataFrame的apply方法正是这样做的: 许多最常见的数组统计信息(例如sum和mean)都是DataFra