代码点索引的Java子串(将代理代码单元对作为单个代码点处理)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码点索引的Java子串(将代理代码单元对作为单个代码点处理)相关的知识,希望对你有一定的参考价值。

我有一个小的演示应用程序,当使用需要代理对的unicode代码点时(即不能用2个字节表示),显示Java的子串实现的问题。我想知道我的解决方案是否运作良好或者我是否遗漏了什么。我考虑过发布在codereview上,但这与Java的Strings实现有很大关系,而不是简单的代码本身。

public class SubstringTest {
    public static void main(String[] args) {

        String stringWithPlus2ByteCodePoints = "
答案

无需两次走到beginIndex

    public String codePointSubstring(String s, int start, int end) {
        int a = s.offsetByCodePoints(0, start);
        return s.substring(a, s.offsetByCodePoints(a, end - start));
    }

翻译自此Scala片段:

def codePointSubstring(s: String, begin: Int, end: Int): String = {
  val a = s.offsetByCodePoints(0, begin)
  s.substring(a, s.offsetByCodePoints(a, end - begin))
}

我省略了IllegalArgumentExceptions,因为它们似乎不包含任何比抛出的异常更多的信息。

以上是关于代码点索引的Java子串(将代理代码单元对作为单个代码点处理)的主要内容,如果未能解决你的问题,请参考以下文章

Java业务代理模式~

java啥是代码点和代码单元

Java中的代码点和代码单元(转)

8点了解Java服务端单元测试

JUnit单元测试

对JAVA代码单元测试