Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按代码点索引的Java子字符串(将代理代码单元对视为单个代码点)_Java_String_Unicode_Character Encoding_Char - Fatal编程技术网

按代码点索引的Java子字符串(将代理代码单元对视为单个代码点)

按代码点索引的Java子字符串(将代理代码单元对视为单个代码点),java,string,unicode,character-encoding,char,Java,String,Unicode,Character Encoding,Char,我有一个小的演示应用程序,展示了当使用需要代理项对的unicode代码点(即不能用2个字节表示)时Java的子字符串实现的问题。我想知道我的解决方案是否有效,或者我是否遗漏了什么。我曾考虑过在codereview上发表文章,但这与Java的字符串实现比我的简单代码本身有更多的关系 public class SubstringTest { public static void main(String[] args) { String stringWithPlus2Byte

我有一个小的演示应用程序,展示了当使用需要代理项对的unicode代码点(即不能用2个字节表示)时Java的子字符串实现的问题。我想知道我的解决方案是否有效,或者我是否遗漏了什么。我曾考虑过在codereview上发表文章,但这与Java的字符串实现比我的简单代码本身有更多的关系

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

        String stringWithPlus2ByteCodePoints = "No need to walk to the 
beginIndex
twice:

    public String codePointSubstring(String s, int start, int end) {
        int a = s.offsetByCodePoints(0, start);
        return s.substring(a, s.offsetByCodePoints(a, end - start));
    }
公共类子字符串测试{
公共静态void main(字符串[]args){

String stringWithPlus2ByteCodePoints=“无需走到
beginIndex
两次:

def codePointSubstring(s: String, begin: Int, end: Int): String = {
  val a = s.offsetByCodePoints(0, begin)
  s.substring(a, s.offsetByCodePoints(a, end - begin))
}
从这个Scala片段翻译过来:


我省略了
IllegalArgumentException
s,因为它们似乎包含的信息并不比抛出的异常多。

不是“大于2字节的unicode字符”,而是需要代理项对的unicode代码点。Java中的每个字符都是UTF-16(根据定义是2个字节,但这并不相关),但如果不使用代理项对,某些代码点就无法在UTF-16中表示。公平地说,我不确定术语。编辑标题/描述您正在计算代码点的偏移量,但您的输入会被测试,就好像
beginIndex
endIndex
beginIndex>length | endInde>中的索引代码单元一样x>length
。你可能想要一些带有
codePointCount
的东西。Codepoints是一种东西,但你确定你不想要吗?@TomBlodget哇,这只是一整罐蠕虫,不是吗?我个人只是在这个案例中进行实验,但在某些情况下看起来确实需要一些东西。