Java 11 中 Stringtrim() 和 strip() 方法的区别

2024-01-02

除其他更改外,JDK 11 还为 java.lang.String 类引入了 6 个新方法:

  • repeat(int)- 重复字符串所提供的次数int范围
  • lines()- 使用 Spliterator 延迟提供源字符串中的行
  • isBlank()- 指示字符串是否为空或仅包含空白字符
  • stripLeading()- 删除开头的空白
  • stripTrailing()- 删除末尾的空白
  • strip()- 删除字符串开头和结尾的空格

尤其,strip()看起来很相似trim()。按照本文 https://dzone.com/articles/applying-new-jdk-11-string-methods 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() and String.strip()从 Java 11 开始?


简而言之: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)没有被介绍到CharacterJDK 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 11 中 Stringtrim() 和 strip() 方法的区别 的相关文章

  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 具有共享依赖项的多模块项目的 Gradle 配置

    使用 gradle 制作第一个项目 所以我研究了 spring gradle hibernate 项目如何组织 gradle 文件 并开始制作自己的项目 但是 找不到错误 为什么我的配置不起作用 子项目无法解决依赖关系 所以项目树 Root
  • 如何获取 WebElement 的父级[重复]

    这个问题在这里已经有答案了 我试过了 private WebElement getParent final WebElement webElement return webElement findElement By xpath 但我得到
  • 隐式超级构造函数 Person() 未定义。必须显式调用另一个构造函数?

    我正在开发一个项目 但收到错误 隐式超级构造函数 Person 未定义 必须显式调用另一个构造函数 我不太明白它 这是我的人物课程 public class Person public Person String name double D
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 具有字符串类型的 CAPL 关联数组

    按照此paper https kb vector com upload 551 file CAPL 3 CANNewsletter 201411 PressArticle EN pdf 我正在尝试创建一个像这样的关联数组 variables
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • Java 收集返回顶级项目的映射的嵌套流

    我有以下模型 class Item String name List
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部

随机推荐

  • jQuery:查找下一个不是兄弟元素的元素

    假设我有以下 HTML span span class x X1 span span span span span class x X2 span span span And this is the span 找到下一个元素匹配的最佳方法是
  • 绑定套接字是否可以确保其端口始终相同?

    我在互联网上发现有关套接字的信息少之又少 也许是因为我的搜索策略 将套接字绑定到操作系统 NAT 选择的端点 实际上是由什么选择的 是否可以确保使用它发送的数据包始终具有相同的源端口 例如 如果我要创建套接字并将其绑定到 Windows 选
  • 从http地址读取XML文件

    我需要使用 c net 从源读取 xml 文件 如下所示 https 10 1 12 15 xmldata item all 这基本上只是一个 xml 文件 StreamReader 不喜欢这样 阅读该链接内容的最佳方式是什么 该文件看起来
  • 如何在单击 EditText 时禁用键盘?

    您好 我想做下一件事 当我单击 EditText 时 我想隐藏键盘但看到光标 我尝试这样做 editText test setCursorVisible false editText test setFocusableInTouchMode
  • C++ 在初始化列表之外显式调用父构造函数

    因此 调用父类构造函数的普通方法是在初始化列表中 e g include
  • 如何在 Zend Framework 2 中打开 PHP 错误报告?

    每次我在 Zend Framework 2 中收到错误时 我只会显示 500 Internal Server Error 并且必须搜索 Zend Server 错误日志 我尝试将其放入我的 config autoload local php
  • 我们如何在 grunt cssmin 任务中设置目标?

    我正在尝试cssmin https github com gruntjs grunt contrib cssmin对于咕噜 根据文档 目标可以 根据 grunt 配置任务指南 进行定义 当我使用该模式创建 cssmin 任务时 例如 css
  • 如何在 Swift 中访问程序参数?

    C 及其衍生物有argc and argv and envp 参数到它们的入口点函数 但是 Swift 没有一个合适的参数 顶级代码只是代码 它没有参数 一个人怎样才能获得相当于argc and argv在 Swift 程序中 Proces
  • 如何使用 C# 注释 XMLElement?

    我的应用程序从我每次执行应用程序时写入的 xml 文件中读取值 这就是我对台词的评论 XmlComment DirCom doc CreateComment Comment XmlElementName AppendChild DirCom
  • 使用 Owl Carousel 2 缩放自定义动画

    我在用猫头鹰旋转木马 2 https owlcarousel2 github io OwlCarousel2 index html 我在图像中添加了一些比例动画 我遇到两个问题 我不想将滑块从右向左滑动 如何重新启动动画 我的意思是 如果我
  • 使用vba的.ExportAsFixedFormat方法从Excel打印没有边距的图表表?

    我使用以下例程将图表导出 保存 为 pdf 该函数获取集合中用户选择的图表表的名称 然后将其一张一张导出为pdf 用户可以选择导出的pdf的保存文件夹 这是我的代码 Private Function ExportCurvesPDF Curv
  • 异步编程就像僵尸病毒吗?

    我正在尝试用 C 进行异步编程 主要是尝试将 API 调用发送到我创建的 API 但根据我的理解 只能调用async另一个方法async方法 然而 我的Main方法不能是异步的 我不想使用同步调用该方法 Result属性 因为这破坏了异步编
  • Power BI / 在报表视图上添加刷新按钮

    我在 Power BI 方面没有太多专业知识 我开始研究它 发现它非常简单 并且我创建了一份报告 该报告运行良好 现在 我需要在报表上添加刷新按钮 该按钮将刷新数据源并从中获取最新数据 我尝试对其进行大量搜索 但仍然无法找到任何合理的解决方
  • 如何配置任务以在 vscode 中运行/调试 C# 控制台应用程序

    从 build中 我看到了运行nodejs和asp net 5的酷感 我正在尝试使用 vscode 来运行一些基本的 C 控制台应用程序 我应该如何配置任务来构建和运行 调试它 有样品吗 yeoman aspnet 生成器有一个可以在 VS
  • 如何使用带有字节而不是文件的Python子进程

    我可以使用以下命令将 mp4 转换为 wavffmpeg 通过做这个 ffmpeg vn test wav i test mp4 我也可以使用subprocess做同样的事情 只要我的输入和输出是文件路径 但如果我想用怎么办ffmpeg直接
  • Python 添加空白/空列。数据集

    您好 我有一个数据库 我正在尝试快速从中创建 csv 文件 我的数据看起来像这样 Song Name File Name Artist Name Artist ID Song1 filename1 artistname artist001
  • Php+Mysql投票如何通过IP限制每天的投票数?

    你好 我有这个投票脚本attached它按 IP 地址计算选票 请问如何在 IP 地址上创建一种时间会话 比如说每个 IP 每天 5 票 投票者必须再等待 24 小时才能再次投票 我知道存在这样的问题 我尝试了一些 但就是无法使其发挥作用
  • Android Packager:[main] java.util.zip.ZipException:重复条目:classes.dex

    我正在 IntelliJ IDEA 中构建 Android 应用程序 我使用的是截至 2013 年 10 月 22 日的最新 Android SDK 工具 对于最近发布的 Android 4 3 该工具的 API 级别高达 18 我的构建目
  • 无法写入文件中的数据,程序C++中没有错误

    我无法使用类中的这些指针变量在文件上写入数据 程序没有错误 但没有数据写入文件 请有人告诉我我哪里做错了 include
  • Java 11 中 Stringtrim() 和 strip() 方法的区别

    除其他更改外 JDK 11 还为 java lang String 类引入了 6 个新方法 repeat int 重复字符串所提供的次数int范围 lines 使用 Spliterator 延迟提供源字符串中的行 isBlank 指示字符串