使用Java语言进行Unicode代理编程 - 编程入门网
< len; i++) {
if (Character.isSurrogatePair(str.charAt(i - 1), str.charAt(i))) {
surrogatePairCount++;
i++;
}
}
acp = new int[len - surrogatePairCount];
for (int i = 0, j = 0; i < len; i++) {
char ch0 = str.charAt(i); // the current char
if (Character.isHighSurrogate(ch0) && i + 1 < len) {
char ch1 = str.charAt(i + 1); // the next char
if (Character.isLowSurrogate(ch1)) {
acp[j++] = Character.toCodePoint(ch0, ch1);
i++;
continue;
}
}
acp[j++] = ch0;
}
return acp;
}
使用Java语言进行Unicode代理编程(2)时间:2010-11-20 IBM Masahiko Maedera清单 2 中更新软件的方法很幼稚。它比较麻烦,需要大量修改 ,使得生成的软件很脆弱且今后难以更改。具体而言,这些问题是: 需 要计算码位的数量以分配足够的内存 很难获得字符串中的指定索引的正 确码位值 很难为下一个处理步骤正确移动当前索引 一个改进后的算法出现在下一个示例中。 示例:基本支持 Java 1.5 提供了 codePointCount()、codePointAt() 和 offsetByCodePoints() 方法来分别处理 示例 1-2 的 3 个问题。清单 3 使用 这些方法来改善这个算法的可读性: 清单 3. 基本支持
但是,清单 3 的处理时间比 清单 1 长 2.8 倍。 示例 1-4:使用 codePointBefore() 当 offsetByCodePoints() 接收一个负数 作为第二个参数时,它就能计算一个距离字符串头的绝对偏移值。接下来, codePointBefore() 能够返回一个指定索引前面的码位值。这些方法用于清单 4 中从尾至头遍历字符串: 清单 4. 使用 codePointBefore() 的基本支持
使用Java语言进行Unicode代理编程(3)时间:2010-11-20 IBM Masahiko Maedera这个示例的处理时间 — 比 示例 1-1 长 2.72 倍 — 比 示例 1-3 快一些。通常,当您比较零而不是非零值时,JVM 中的代 码大小要小一些,这有时会提高性能。但是,微小的改进可能不值得牺牲可读性 。 示例 1-5:使用 charCount() 示例 1-3 和 1-4 提供基本的代 理对支持。他们不需要任何临时变量,是健壮的编码方法。要获取更短的处理时 间,使用 charCount() 而不是 offsetByCodePoints() 是有效的,但需要一个 临时变量来存放码位值,如清单 5 所示: 清单 5. 使用 charCount() 的优化支持
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |