【发布时间】:2015-01-31 02:35:30
【问题描述】:
尝试解决修剪字符串的问题。
是否有任何 ascii 字符不计入 length() 或 substring(int, int)?
例如。如果字符串来自程序外部的序列化对象并包含诸如“文本开头”(ascii hx2)或“bell”(ascii hx7)之类的字符,这些字符将在长度()或子字符串(int,int )?
【问题讨论】:
-
Java 字符串不是 ASCII,而是 UTF-16。
尝试解决修剪字符串的问题。
是否有任何 ascii 字符不计入 length() 或 substring(int, int)?
例如。如果字符串来自程序外部的序列化对象并包含诸如“文本开头”(ascii hx2)或“bell”(ascii hx7)之类的字符,这些字符将在长度()或子字符串(int,int )?
【问题讨论】:
查看String#length的文档:
返回此字符串的长度。长度等于字符串中 Unicode 代码单元的数量。
这意味着所有字符都包含在长度中。具体来说,这将返回在 Java 中表示字符串所需的 chars 的数量。
但是,值得注意的是,由于 Java 使用 UTF-16 处理 Unicode 字符的方式,某些 Unicode 字符实际上会占用字符串中的两个 chars。请参阅the relevant documentation 了解更多信息。
【讨论】:
是否有任何 ascii 字符不计入 length() 或 substring(int, int)?
不,没有。这两个方法都是“哑”的,将返回存储在String 对象的底层字符数组中的chars 的数量(实际上,.length() 继承自CharSequence)。
无论是ASCII控制字符,还是U+0000、U+FFFF等“非字符”,都会被计算在内。
【讨论】: