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增加了对 超大字符集的支持,只要设置字体正确,就可以显示和编辑超大字符集。
分享到:
相关推荐
此外,还有一些其他函数,如`strcmp()`进行字符串比较,`strncasecmp()`进行不区分大小写的部分字符串比较,以及`strspn()`和`strpbrk()`用于查找连续字符集等。 在实际应用中,熟练掌握这些字符串函数将大大提高...
**功能描述:** 反转字符串。 **示例代码:** ```php $str = "hello"; echo strrev($str); // 输出 "olleh" ``` #### 四、分割(Part) 字符串分割是在处理数据时常见的需求。 ##### `trim` **功能描述:** ...
### C语言字符串函数合集及其详解 在C语言中,字符串是通过字符数组来表示的一系列字符,通常以空字符`'\0'`作为结尾。处理字符串时,开发者经常需要利用到一系列内置的字符串处理函数,这些函数可以极大地方便字符...
`REVERSE()` 函数反转字符串中的字符顺序。 ```sql SELECT REVERSE('Hello'); ``` 结果是 "olleH"。 了解并熟练运用这些函数,能极大地提升你在处理字符串数据时的效率和准确性。记住,不同的数据库系统可能有...
- `xstrings.IndexAny`:此函数用于查找字符串中指定字符集内的第一个出现位置,类似于其他语言中的`strpbrk`。 - `xstrings.Replace`:与标准库中的`strings.Replace`类似,但支持同时替换多个子串,这在需要批量...
10. REVERSE:反转字符串的字符顺序。如 `REVERSE('ACTION')` 返回 "NOITCA"。 11. RIGHT:从字符串右侧开始提取指定数量的字符。例如,`RIGHT('RICHARD', 4)` 返回 "HARD"。 12. RTRIM:移除字符串右侧的空格。如...
MySQL中的字符串处理函数是数据库操作中非常重要的工具,它们允许我们对存储的数据进行各种操作,如拼接、截取、转换、查找等。以下是对这些函数的详细解释: 1. ASCII(char):此函数返回字符的ASCII码值,即字符...
对于这类多字节字符集的字符串反转,需要使用多字节字符串处理的函数。PHP中的mbstring扩展提供了这样的一系列函数,其中mb_substr()可以用来截取多字节字符串的一部分。为了实现多字节字符串的反转,可以通过计算...
28. **strrev($string)**: 反转字符串中的字符顺序。 29. **strtok($string, $delimiters, $token)**: 用于字符串的分词操作,返回第一次遇到的分隔符之前的字符串部分。 30. **strtr($str, $replace_pairs)**: ...
具体而言,先反转字符串,再从中提取部分字符,最后反转回原始顺序,这是一种巧妙的方法,但在实际应用中应根据具体情况权衡效率与可读性。 ### 结论 通过对SQL Server中字符串处理函数的深入探讨,我们不仅学会了...
4. **字符串反转**:这是一个常见的字符串操作,可以使用双指针技术或者栈来实现。 5. **动态规划与字符串**:例如Longest Common Subsequence(LCS)最长公共子序列,Longest Palindromic Substring(LPS)最长...
1. 字符串反转需求与应用场景 字符串反转是指将字符串中的字符顺序颠倒,形成一个新的字符串。在某些特定场景下可能需要这种操作,例如:加密解密、编程语言的自定义输出格式、特殊效果的文本显示等。 2. PHP内置...
REVERSE()函数将字符串中的字符顺序反转,REPLACE()函数则用于替换字符串中的子字符串。 这些Transact-SQL基本函数是处理SQL Server数据库数据的基石,掌握了这些函数的使用,对于数据库管理和数据处理将变得...
2. **字符串反转函数** (`reverse`): 反转字符串。 3. **字符串连接函数** (`concat`): 将多个字符串连接成一个字符串。 4. **带分隔符字符串连接函数** (`concat_ws`): 带分隔符地连接多个字符串。 5. **字符串截取...
在C和C++编程语言中,函数库是程序员在开发过程中不可或缺的一部分,它们提供了一系列预定义的函数,用于执行各种常见的任务,如数学运算、字符串处理和时间日期操作。以下是一些关键函数的详细说明: **第1章:...
38. `strrev()`:将字符串反转,可用于倒序输出。 39. `strspn()`:返回字符串中属于指定字符集合的部分的长度。 40. `strstr()`:返回字符串中指定子字符串开始处到字符串结尾的部分。 41. `strtok()`:将字符串...
在Python中,可以结合 `rfind()` 或 `[::-1]` 反转字符串来实现这一功能。 3. **提取字符串中指定字符间的子串**: 提取特定字符之间的子串通常需要用到分隔符。例如,如果字符串是 "key1=value1;key2=value2",...
对要输出的字符串进行反转换 对输入JS进行转换 寻找两个函数所有不同的元素 寻找两数组所有不同元素 得到文件类型 截取字符串中两个特定唯一字符之间的内容 截取指定长度字符串 折线图 按照比例改变图片大小...