java jdk设置字符集
Java的String类似乎将在JDK 11中获得一些新方法,该方法将于2018年9月发布。
错误号 | 错误标题 | 新的 | 描述 |
字符串::行 | | “使用专用的分隔符从源字符串中懒散地提供行的字符串实例方法。” | |
String :: strip,String :: stripLeading,String :: stripTrailing | | trim()的 “ Unicode感知”演变 | |
| “从一开始就删除Unicode空白” | ||
| “从……端删除Unicode空白” | ||
字符串:: 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()
方法( 邮件列表查看请求 )解决了这个问题:
当前针对String :: trim的JavaDoc并未明确说明代码中使用了哪个“空格”定义。 随着不久的将来会出现其他使用不同空间定义的修整方法,因此有必要进行澄清。 String :: trim使用空格的定义作为小于或等于空格字符代码点(\ u0040)的任何代码点。较新的修整方法将使用(空格)的定义作为任何传递给参数时返回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
新方法提供了一种更一致的方法来处理字符串中的空白,从而可以更好地处理国际化;提供了仅在字符串开头或字符串结尾处修剪空白的方法,并提供了专门用于原始字符串文字的方法 。