java 代码点 代码单元

引用 http://blog.csdn.net/xujinsmile/article/details/8526387

    Java中,char[]、String、StringBuilder和StringBuffer类中采用了UTF-16编码,使用U+0000~U+FFFF来表示一个基本字符(BMP字符),但是位于U+D800到U+DBFF和U+DC00到U+DFFF的char被视为无定义字符。大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。即:基本字符用一个char表示,辅助字符使用一对char表示。

Java使用代码点(Unicode code pointer)这个概念来表示范围在U+0000与U+10FFFF之间的字符值(int型),代码单元(Unicode code unit)表示作为UTF-16编码的代码单元的 16位char值(char型)。也就是说,可能存在一个字符,它的代码点数量是1,而代码单元数量是2。所以,代码单元的数量并不一定是字符的数量。

相关函数:

    ength()函数返回采用UTF-16编码标识的给定字符串所需要的代码单元的数量。

    codePointCount()函数返回采用UTF-16编码标识的给定字符串所需要的代码点的数量。

1package com.xujin; 2 3public class Test{ 4 public static void main(String...args){ 5 char[] ch = Character.toChars(0x10400); 6        System.out.printf("U+10400 高代理字符: %04x\n", (int)ch[0]);//d801 7        System.out.printf("U+10400 低代理字符: %04x\n", (int)ch[1]);//dc00    8        String str = new String(ch); 9        System.out.println("代码单元长度: " + str.length());//2 10        System.out.println("代码点数量: " + str.codePointCount(0, str.length()));//1 11 System.out.println(str.codePointAt(0));//返回给定位置开始或结束的代码点,66560 12 System.out.println(str.charAt(1));//返回给定位置的代码单元,由于未定义,返回? 13 14 //遍历一个字符串,打印出所有字符的代码点 15 str += "Hello,world!"; 16 int i = 0; 17 int cp = str.codePointAt(i); 18 while(< str.length()){ 19 System.out.println(str.codePointAt(i)); 20 if(Character.isSupplementaryCodePoint(cp)) 21+= 2;//如果cp所在的位置是代码点的第一部分,执行此处 22 else i++; 23 } 24 /* 25  * 66560  26  * 72  27  * 108  28  * 111  29  * 119  30  * 114  31  * 100 32  */ 33 } 34}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript日期

日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )