java字符和汉字⽐较_Java⽐较汉字字符串排序与C++⽐较汉
字排序
⼀、Java⽐较汉字
// Collator 类是⽤来执⾏区分语⾔环境的 String ⽐较的,这⾥选择使⽤CHINA
Comparator cmp = Instance(java.util.Locale.CHINA);
TreeMap tree=new TreeMap(cmp);
String[] arr = {"张三", "李四", "王五"};
// 使根据指定⽐较器产⽣的顺序对指定对象数组进⾏排序。
Arrays.sort(arr, cmp);
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i]);
names = ["张三", "李四", "王五", "刘六"];
names.sort(function(a,b){return a.localeCompare(b)});//a,b 为数组a的某两个值,⾃动传⼊
alert(names);
另:
⽰例⽂本:
String [] test = new String[] {
"作业",
"测试",
"test",
"我们",
"。空",
"镂空",
"[",
"浏",
"皙"
};
jdk 版本:
1.5.6
开发平台:
Eclipse 3.1
我们在应⽤程序中可能会经常遇到对中⽂排序的问题,例如姓名列表,词汇表等等。对中⽂排序,我们使⽤⽐较多的是根据汉语拼⾳发⾳来确定顺序。
我们可能会经常使⽤
java.util.
接⼝,
java.util.Comparator super T> c))
等类或⽅法对含有中⽂字符的对象进⾏排序,但是这些在默认情况下都是调⽤
⽅法,这个⽅法是⽐较2个字符的 codepoint value,如果第⼀个字符的值⼩于第⼆个,则在排序结果中第⼀个会在前⾯,反之亦然。
<
接⼝及其实现类
其实 java 中提供了和语⾔相关的类,即 Collator 接⼝及其实现类。
是⼀个具体类,它实现了 Comparator 接⼝中的 compare(Object, Object) ⽅法。 RuleBasedCollator 根据根据特定语⾔的默认规则⽐较字符,也可以按照指定的规则来⽐较,请参阅 java API 获取此类的详细信 息。
如果我们需要对⼀个有中⽂的数组进⾏排序,则可以使⽤这个类。请看如下⽰例代码:
import java.util.*;
*;
public class Test
{
"作业",
"测试",
"test",
"我们",
"。空",
"镂空",
"[",
"浏",
"皙"
};
java.util.
"============");
for(
}
以上代码的输出结果为:
。空
测试
我们
作业
镂空
⼤家可能会发现只有⼀部分汉字是按照汉语拼⾳排序了,还有⼏个没有。
问题分析:
GB2312:
在简体中⽂中我们使⽤⽐较多的字符集是 GB2312-80,简称为 GB2312,这个字符集包含了⽬前最常⽤的汉字共计 6736 个。其中的汉字分为两⼤类:
常⽤汉字
次常⽤汉字
常⽤汉字按照汉语拼⾳来排序,⽽次常⽤汉字按照笔画部⾸进⾏排序。
简体汉字在 Unicode 中⼀般是按照 gb2312 的码点值的顺序来放置的,所以如果是常⽤汉字 java 就能够很准确的进⾏排序,但如果是次常⽤汉字,则就会出现问题。在以上⽰例中,"镂","皙" 属于次常⽤字。
解决⽅案:
RuleBasedCollator 类 getRules() ⽅法可以返回对应语⾔的规则设置。简体中⽂对应的规则是 gb2312 所对应的字符。
我们可以把其中的全部汉字提取出来
对这些汉字重新排序
利⽤RuleBasedCollator(String rules) 构造器新建⼀个定制的 RuleBasedCollator
参考代码
在以下的代码中,我把排过序的汉字直接作为 String 对象放在类⾥⾯了,如果要让代码变得简洁⼀些,则可以把完整的规则(特殊字符+排序汉字)存为⽂件。
package sorting;
import java.util.*;
*;
/**
* @author GaoJianMin
*
*/
* @return a customized RuleBasedCollator with Chinese characters (GB2312) sorted correctly *
*/
public static final RuleBasedCollator getFixedGB2312Collator()
{
null;
try
{
fixedGB2312Collator =
GB2312Chars
);
{
e.printStackTrace();
}
return fixedGB2312Collator;
}
/**
* @return the special characters in GB2312 charset.
*
*/
public static final String getGB2312SpecialChars()
{
//index 2125 is the last symbol "╋"
return Rules().substring(0,2125);
}
/**
* 6763 Chinese characters in GB2312 charset
*/
public static final String GB2312Chars =
"
}
package sorting;
import java.util.*;
*;
/**
* @author GaoJianMin
*
*/
public class ChineseGB2312Comparator implements Comparator< FixedGB2312Collator();
private String str1;
/**
* @param str1
*/
public ChineseGB2312Comparator(
this.str1 = str1;
}
/**
*
*/
字符串比较函数实现public ChineseGB2312Comparator() {
this.str1="";
}
/**
* @param str1
* @param str2
* @return an integer indicatint the comparison result
* @see java.util.Comparator#compare(Object, Object)
*/
public int compare(
return GB2312Collatorpare(str1, str2);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。