`
xiao_jiang51
  • 浏览: 34693 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

字符串反转函数与超大字符集

阅读更多
 public AbstractStringBuilder reverse() {
	boolean hasSurrogate = false;
	int n = count - 1;
//小技巧
	for (int j = (n-1) >> 1;j >= 0; --j) {
	    char temp = value[j];
	    char temp2 = value[n - j];
	    if (!hasSurrogate) {
		hasSurrogate = (temp >= Character.MIN_SURROGATE && temp <= Character.MAX_SURROGATE)
		    || (temp2 >= Character.MIN_SURROGATE && temp2 <= Character.MAX_SURROGATE);
	    }
	    value[j] = temp2;
	    value[n - j] = temp;
	}
	if (hasSurrogate) {
	    // Reverse back all valid surrogate pairs
	    for (int i = 0; i < count - 1; i++) {
		char c2 = value[i];
		if (Character.isLowSurrogate(c2)) {
		    char c1 = value[i + 1];
		    if (Character.isHighSurrogate(c1)) {
			value[i++] = c1;
			value[i] = c2;
		    }
		}
	    }
	}
	return this;
    }


看源码时hasSurrogate这个玩意不是很清楚
查了下资料豁然开朗


EasyJF 官方网站全面升级,同时EasyJF开源团队也将进行全面改组,期待您给我们提出宝贵的意见及建议!

当前位置:首页-MyRss-Java高级应用

JDK 1.5 对超大字符集的支持
作者: 本站会员  来源:  发布时间:2009-04-07 20:46:12
JDK 1.5 对超大字符集的支持

Unicode 与超大字符集
国标 GB18030 规定了4字节扩展部分,这部分区域目前在 Unicode 规范中作为CJK Ext B区存在,即常说的中文超大字符集。这部分区域编码为 \U20000 - \U2A6D6。



UTF-16与Java String/Character 对象
一个完整的 Unicode 字符叫 代码点/CodePoint,而一个 Java char 叫 代码单元 code unit。
String 对象以UTF-16保存 Unicode 字符,需要用2个字符表示一个 超大字符集的汉字,这这种表示方式称之为 Surrogate,第一个字符叫 Surrogate High,第二个就是 Surrogate Low。

判断一个char是否是 Surrogate 区的字符,用 Character的 isHighSurrogate()/isLowSurrogate()方法。
从两个Surrogate High/Low 字符,返回一个完整的 Unicode CodePoint 用 Character.toCodePoint()/codePointAt()方法。

一个 Code Point ,可能需要一个也可能需要两个char表示,因此不能直接使用 CharSequence.length()方法直接返回一个字符串到底有多少个汉字,而需要用String.codePointCount()/Character.codePointCount()。

要定位字符串中的第N个字符,不能直接将 N 作为偏移量,而需要从字符串头部依次遍历得到,需要用String/Character.offsetByCodePoints() 方法。

从字符串的当前字符,找到上一个字符,也不能直接用offset -- 实现,而需要用 String.codePointBefore()/Character.codePointBefore(),或用 String/Character.offsetByCodePoints()

从当前字符,找下一个字符,不能直接用 offset ++ 实现,需要判断当前 CodePoint 的长度后,再计算得到,或用 String/Character.offsetByCodePoints() 。

Swing 对 超大字符集的支持
JTextPane增加了对 超大字符集的支持,只要设置字体正确,就可以显示和编辑超大字符集。



分享到:
评论

相关推荐

    PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例

    对要输出的字符串进行反转换 对输入JS进行转换 寻找两个函数所有不同的元素 寻找两数组所有不同元素 得到文件类型 截取字符串中两个特定唯一字符之间的内容 截取指定长度字符串 折线图 按照比例改变图片大小...

    精通WindowsAPI 函数 接口 编程实例

    15.2.5 字符串表 469 15.3 安装程序setup.exe的编号 469 15.4 使用msi文件进行安装 472 15.4.1 Windows Installer Service 472 15.4.2 msi文件的创建与修改工具orca.exe 474 15.4.3 准备工作 475 15.4.4...

    精通Windows.API-函数、接口、编程实例.pdf

    15.2.5 字符串表 469 15.3 安装程序setup.exe的编号 469 15.4 使用msi文件进行安装 472 15.4.1 Windows Installer Service 472 15.4.2 msi文件的创建与修改工具orca.exe 474 15.4.3 准备工作 475 15.4.4...

    LY-51S 开发板函数集使用手册

    1、KeyScan-------键盘扫描函数,使用行列反转扫描法 2、KeyPro--------------按键值处理函数,返回扫键值 五、 独立按键检测函数 1、KeyCheck---------------------独立按键扫描函数 六、 I2C总线 24C02函数 1、...

    30个C#小程序学习C#的基

    递归方法求阶乘字符串反转 订票 发奖学金 构造函数属性 关闭特定程序 何意数排序 加密 解一元二次方程的解 九九乘法表 矩形 矩阵相乘-改进加入异常处理 矩阵相乘 利用列表排n个数的序 判断是否为汉字 棋盘 求N个数的...

    C#小程序(30个)

    c#.net常用函数和方法集.txt C#对注册表的操作.txt choosesubject.txt n个数排序.txt unknown.txt 一到一百之间的素数.txt 三个数排序.txt 三个数最大数.txt ...递归方法求阶乘字符串反转.txt 验证概率.txt

    leetcode第321题-javascript-tavascript:技术面试数据结构与算法练习题

    反转字符串 检查字符串是否为回文(使用内置函数) 检查字符串是否为回文(没有内置函数) 计算字符串中字符的出现次数 从字符串中删除特定字符 你如何在整数数组中找到第二大数字? 给定两个数组,1,2,3,4,5 和 2,3...

Global site tag (gtag.js) - Google Analytics