那你就用两会 subString(a,b)呗,只要你知道开始索引和结束索引,两个单元分别用一次,两个就都返回了

解决方案 »

  1.   

    那就出现了乱码。你要用codePointAt功能来判断截断点是否是两个代码单元组成的代码点
      

  2.   


    比如第二行的第一个符号,是由两个代码单元组成的,而substring这个函数返回的是代码单元,如果substring(1,3), 那不是只返回这个符号的一个代码单元,岂不是乱码? 为什么substring不直接返回代码点呢?
      

  3.   


    为什么substring不直接返回代码点呢? 如果字符串含有增补代码点的话,这样用的时候岂不是很麻烦,每次都要codePointAt(i);来确定?
      

  4.   


    为什么substring不直接返回代码点呢? 如果字符串含有增补代码点的话,这样用的时候岂不是很麻烦,每次都要codePointAt(i);来确定?
    其实根本的问题是Java没有用代码点二是代码单元来组织String。但是这个问题也是历史遗留问题,当年的UTF16规定一个代码点只能有两个代码单元,所以String就这么设计了。后来新加的补充代码才规定某些代码点需要4个代码单元,但是Java不能就这么改了因为
    1) String太底层了
    2) 要么导致效率低下,要么导致内存占用增加
    3) 开发Java的人只需要26个字母
    以上纯属猜测。不过你可以写一个subStringByCodePoint方法来做这件事情
      

  5.   


    为什么substring不直接返回代码点呢? 如果字符串含有增补代码点的话,这样用的时候岂不是很麻烦,每次都要codePointAt(i);来确定?
    其实根本的问题是Java没有用代码点二是代码单元来组织String。但是这个问题也是历史遗留问题,当年的UTF16规定一个代码点只能有两个代码单元,所以String就这么设计了。后来新加的补充代码才规定某些代码点需要4个代码单元,但是Java不能就这么改了因为
    1) String太底层了
    2) 要么导致效率低下,要么导致内存占用增加
    3) 开发Java的人只需要26个字母
    以上纯属猜测。不过你可以写一个subStringByCodePoint方法来做这件事情Thanks!