【问题标题】:Java String length() and substring(int, int) not consider certain characters?Java String length() 和 substring(int, int) 不考虑某些字符?
【发布时间】:2015-01-31 02:35:30
【问题描述】:

尝试解决修剪字符串的问题。

是否有任何 ascii 字符不计入 length() 或 substring(int, int)?

例如。如果字符串来自程序外部的序列化对象并包含诸如“文本开头”(ascii hx2)或“bell”(ascii hx7)之类的字符,这些字符将在长度()或子字符串(int,int )?

【问题讨论】:

  • Java 字符串不是 ASCII,而是 UTF-16。

标签: java regex string


【解决方案1】:

查看String#length的文档:

返回此字符串的长度。长度等于字符串中 Unicode 代码单元的数量。

这意味着所有字符都包含在长度中。具体来说,这将返回在 Java 中表示字符串所需的 chars 的数量。

但是,值得注意的是,由于 Java 使用 UTF-16 处理 Unicode 字符的方式,某些 Unicode 字符实际上会占用字符串中的两个 chars。请参阅the relevant documentation 了解更多信息。

【讨论】:

    【解决方案2】:

    是否有任何 ascii 字符不计入 length() 或 substring(int, int)?

    不,没有。这两个方法都是“哑”的,将返回存储在String 对象的底层字符数组中的chars 的数量(实际上,.length() 继承自CharSequence)。

    无论是ASCII控制字符,还是U+0000、U+FFFF等“非字符”,都会被计算在内。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 2016-06-03
      • 2014-03-03
      • 2021-05-10
      • 2020-10-02
      • 1970-01-01
      相关资源
      最近更新 更多