网站版式有哪几种摘抄一则新闻
网站版式有哪几种,摘抄一则新闻,一个企业seo网站的优化流程,虚拟机wordpress教程视频Character类除了封装了一个char外#xff0c;还封装了Unicode字符级别的各种操作#xff0c;是Java文本处理的基础。下面结合源码分析Character的贡献。
Unicode
也许你没听过Unicode#xff0c;但应该见过UTF-8。UTF-8#xff08;8-bit Unicode Transformation Format还封装了Unicode字符级别的各种操作是Java文本处理的基础。下面结合源码分析Character的贡献。
Unicode
也许你没听过Unicode但应该见过UTF-8。UTF-88-bit Unicode Transformation Format是一种常用的Unicode字符编码方案之一。它使用变长编码方式将Unicode码点编码成1至4个字节的序列。UTF-8编码保证了对ASCII字符的向后兼容性因此在处理纯英文文本时其存储效率与ASCII编码相同。
而Unicode是一种字符编码标准它为世界上几乎所有的字符分配了一个唯一的数字标识符。它旨在为文字的表示提供一种统一的方式使得不同国家和语言的字符都能被正确地编码和解码。
在字符编码中有两个重要的概念代码点code point和代码单元code unit。
代码点是Unicode标准中给每个字符分配的唯一整数值。它对应于一个字符的抽象概念表示文本中的一个字符。Unicode的代码点范围从U0000到U10FFFF。每个代码点都有一个唯一的编号可以用十六进制形式表示例如U0041表示字符A。
代码单元是计算机中存储和处理字符时使用的最小单位。在Unicode中代码单元的大小可以是8位1个字节或16位2个字节。在Java中字符是使用Unicode编码表示的。Java的char类型是16位无符号整数即UTF-16 用于表示一个Unicode字符。因此Java中的字符串实际上是由一系列Unicode字符组成的。
然而Unicode中的某些字符需要用多个代码单元来表示这种情况下被称为代理对surrogate pair。代理对由一个高位代理项High Surrogate范围UD800至UDBFF和一个低位代理项Low Surrogate范围UDC00至UDFFF组成它们一起表示一个字符。通过组合高位和低位代理项可以得到完整的代码点。
比如 ☺️ 的码点U1F60A可以通过代理对的方式表示
计算出该码点在辅助平面中的偏移量U1F60A - U10000 0xF60A将偏移量拆分为高位和低位代理项 高位代理项0xD83D (UD800 0xF60A 10)低位代理项0xDE0A (UDC00 0xF60A 0x3FF)使用这两个代理项来构成代理对从而表示 ☺️。
int codePoint 0x1F60A;
char[] surrogatePair Character.toChars(codePoint);
System.out.println(UTF-16 编码: new String(surrogatePair));检查代码点和字符
Character类中有很多相关静态方法以下是对code point和char的检查
//判断一个int是不是一个有效的代码点小于等于0x10FFFF的为有效大于的为无效
public static boolean isValidCodePoint(int codePoint)
//判断一个int是不是BMP字符小于等于OxFFFF的为BMP字符大于的不是
public static boolean isBmpCodePoint(int codePoint)
//判断一个int是不是增补字符0x010000~0X10FFFF为增补字符
public static boolean isSupplementaryCodePoint(int codePoint)
//判断char是否是高代理项0xD800~0xDBFF为高代理项
public static boolean isHighSurrogate(char ch)
//判断char是否为低代理项0xDC000xDFFF为低代理项
public static boolean isLowSurrogate(char ch)
//判断char是否为代理项char为低代理项或高代理项则返回true
public static boolean isSurrogate(char ch)
//判断两个字符high和low是否分别为高代理项和低代理项
public static boolean isSurrogatePair(char high, char low)
//判断一个代码点由几个char组成增补字符返回2BMP字符返回1
public static int charCount(int codePoint)代码点和字符的互转
之前仅针对int和char之间的转换相信大家都很熟悉就是参照ASCII码
从代码点到字符的转换
int codePoint 65; // 代码点Unicode码点
char c (char) codePoint; // 将代码点转换为字符
System.out.println(c); // 输出字符 A从字符到代码点的转换
char c A; // 字符
int codePoint c; // 将字符转换为代码点Unicode码点
System.out.println(codePoint); // 输出代码点 65而有了低代理项和高代理项后需要用复杂的公式转换。这个公式的基本思想是将高代理项和低代理项分别减去一个偏移量0xD800和0xDC00然后将它们组合起来生成代码点。
public static int toCodePoint(char high, char low) {return ((high - 0xD800) 10) (low - 0xDC00) 0x10000;
}下面是其他的处理函数
//根据高代理项high和低代理项1ow生成代码点这个转换有个公式这个方法封装了这个公式
public static int toCodePoint(char high, char low)
//根据代码点生成char数组即UTF-16表示如果code point为BMP字符则返回的char
//数组长度为1如果为增补字符长度为2char[0]为高代理项char[1]为低代理项
public static char[] toChars(int codePoint)
//将代码点转换为char数组与上面方法类似只是结果存入指定数组dst的指定位置index
public static int toChars(int codePoint, char[] dst, int dstIndex)
//对增补字符code point,生成低代理项
public static char lowSurrogate(int codePoint)
//对增补字符code point生成高代理项
public static char highSurrogate(int codePoint)
Unicode字符属性
Unicode在给每个字符分配一个编号之外还分配了一些属性Unicode给每个字符分配了一个类型这个类型是非常重要的很多其他检查和操作都是基于这个类型的。getType方法的参数可以是int类型的code point,也可以是char类型。char类型只能处理BMP字符而int类型可以处理所有字符。Character类中很多方法都是既可以接受int类型也可以接受char类型。
//获取字符类型
public static int getType(int codePoint)
public static int getType(char ch) 根据这个类型属性可以获得字符的信息
//检查字符是否在Unicode中被定义
public static boolean isDefined(int codePoint)
//检查是否为字母:
public static boolean isLetter(int codePoint)
//检查是否为字母或数字
public static boolean isLetterOrDigit(int codePoint)
//检查是否为字母Alphabetic:
public static boolean isAlphabetic(int codePoint)
//检查是否为空格字符
public static boolean isSpaceChar(int codePoint)
//匹配实际产生空格效果的字符如Tab控制键t。更常用的检查空格的方法
public static boolean isWhitespace(int codePoint)
//检查是否为小写字符
public static boolean isLowerCase(int codePoint)
//检查是否为大写字符
public static boolean isUpperCase(int codePoint)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87102.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!