Java的String类似乎将在JDK 11中获得一些新方法,该方法将于2018年9月发布。
错误号 | 错误标题 | 新的String 方法 | 描述 |
---|---|---|---|
JDK-8200425 | 字符串::行 | lines() | “使用专用的分隔符从源字符串中懒惰地提供行的字符串实例方法。” |
JDK-8200378 | String :: strip,String :: stripLeading,String :: stripTrailing | strip() | trim()的 “ Unicode感知”演变 |
stripLeading() | “从一开始就删除Unicode空白” | ||
stripTrailing() | “从……端删除Unicode空白” | ||
JDK-8200437 | 字符串:: isBlank | isBlank() | “如果字符串为空或仅包含空格,则返回true的实例方法” |
可以在core-libs-dev邮件列表上的请求“ 兼容性和规范审查 ”(CSR)的消息中找到与这些方法有关的进展证据:
- 请查看CSR:JDK-8200425 String#lines (2018年4月25日)
- 请查看CSR:JDK-8200378 String#strip,String#stripLeading,String#stripTrailing (2018年4月25日)
- 请查看CSR:JDK-8200425 String#lines (2018年4月25日)
这五个新方法中的四个的一个共同特征是,它们使用与旧方法(例如String.trim())不同的(较新的)“空白”定义。 错误JDK-8200373 [“ String :: trim JavaDoc应该澄清空间的含义”]甚至针对String.trim()
方法( 邮件列表查看请求 )解决了这个问题:
当前的JavaDoc for String :: trim尚不清楚代码中使用了哪个“空格”定义。 在不久的将来,随着使用不同空间定义的其他修剪方法的出现,必须进行澄清。 String :: trim使用空格的定义作为小于或等于空格字符代码点(\ u0040)的任何代码点。较新的修整方法会将(空格)的定义用作任何传递给the时返回true的代码点。字符:: isWhitespace谓词。
在JDK 1.1中将isWhitespace(char)方法添加到Character中 ,但是直到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字符,包括补充字符。
我在上面的引用中添加了粗体 ,以强调“ 代码点 ”的重要性,“ 代码点 ” 在Java上下文中定义为 “可以在编码字符集中使用的值”。 在JDK 11中为String
提出的五个新方法中,有四个在很大程度上依赖于Character.isWhitespace(int)
包含的概念来确定如何“修剪”给定的字符串或确定给定的字符串是否为“空白”。
说到Unicode,还建议将 JEP 327 [“ Unicode 10”] 添加到JDK 11中。 正如JEP所说,其目的是“升级现有平台API以支持Unicode标准 10.0版 。” 对于任何希望使用此新版本支持的“ 56个新 表情符号字符”的人来说,这将是特别令人兴奋的消息。
结论
当前针对JDK 11提出的String
新方法提供了一种更一致的方法来处理字符串中的空格,可以更好地处理国际化;提供了仅在字符串开头或字符串结尾处修剪空格的方法,并提供了专门用于传入原始字符串文字的方法 。
翻译自: https://www.javacodegeeks.com/2018/05/new-methods-on-java-string-with-jdk-11.html