Java中文排序

第一种情况:

  1. Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);
  2.  
  3. String[] arr = { "张三", "李四", "王五", "刘六" };
  4. Arrays.sort(arr, cmp);
  5. for (int i = 0; i < arr.length; i++)
  6. System.out.println(arr[i]);

第二种情况:

//ComparableBean.java
import java.text.CollationKey;
import java.text.Collator;
import java.text.RuleBasedCollator;
import java.util.Comparator;

public class ComparableBean{
private String name;

public ComparableBean(String name) {

this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
class ComparableBeanComparator implements Comparator//<ComparableBean>
{
RuleBasedCollator collator; // you can set your rules for the instance "collator"
public ComparableBeanComparator()
{
collator = (RuleBasedCollator)Collator.getInstance(java.util.Locale.CHINA);// try testing various locales
}
public int compare(Object obj1, Object obj2) {
String tempname1 = ((ComparableBean) obj1).getName();
String tempname2 = ((ComparableBean) obj2).getName();

CollationKey c1 = collator.getCollationKey(tempname1);
CollationKey c2 = collator.getCollationKey(tempname2);
// return collator.compare(((CollationKey) c1).getSourceString(),
// ((CollationKey) c2).getSourceString());
return collator.compare(((CollationKey) c2).getSourceString(),
((CollationKey) c1).getSourceString());
}
// public int compare(ComparableBean obj1, ComparableBean obj2) {
// String tempname1 = obj1.getName();
// String tempname2 = obj2.getName();
//
// CollationKey c1 = collator.getCollationKey(tempname1);
// CollationKey c2 = collator.getCollationKey(tempname2);
// return collator.compare(((CollationKey) c1).getSourceString(),
// ((CollationKey) c2).getSourceString());
// }
}
//the end of ComparableBean.java

测试代码:

ComparableBean[] nameContent = { new ComparableBean("一切从实际出发"),
new ComparableBean("立于不败之地"), new ComparableBean("多项式"),
new ComparableBean("贯彻落实"), new ComparableBean("密切联系群众"),
new ComparableBean("四项基本原则"), new ComparableBean("咬牙切齿"),
new ComparableBean("恭恭敬敬"), new ComparableBean("民警"),
new ComparableBean("经营承包责任制") };
Arrays.sort(nameContent,new ComparableBeanComparator());
for (int i = 0; i < nameContent.length; i++) {
System.out.println(nameContent[i].getName());
}

时间: 2024-11-01 16:39:33

Java中文排序的相关文章

Java字符串排序中文+数字

  思路: 在Java中,排序需要复写的是 equals 方法 和 Comparable<T> 接口 的public int compareTo(T o); 方法 步骤: 1. 使用正则表达式来判断数字,多个连续的数字作为一组, 2. 一次检索出数字组合, 3. 检出下一组数字,如果有,则进入步骤4,否则进入步骤6. 4. 如果两组数字出现的位置相等,并且前面部分的字符串相等,则进入第5步.否则break,跳到第6步. 5. 如果前面部分的字符串完全一致.则比较两个数字的大小,如果大小一致,则

Java对象排序、中文排序、SortedSet排序使用和源码讲解

在C.C++中有很多排序算法,但是通常排序算法不得不让程序员在写代码的过程中陷入对底层很多指针和位置的理解,java不希望这样,所以排序大多可以由java帮你做掉,例如,你要对一个数组排序,就通过:Collections.sort(list)那么这个list就被排序了,排序最终调用的是Arrays.sort方法来完成的,所以数组自然是用Arrays.sort了,而SortedSet里面内部也有排序功能也是类似的方式的来实现的,只是内部调用了相关的方法来完成而已:SortedSet只是一个接口,实

Java中文进行排序

import java.text.Collator;import java.util.Arrays;import java.util.Comparator; /*** @author leon* 所谓中文排序就是按照汉语拼音的顺序进行排序,* 在Java中进行排序其实不需要自己来写算法,* java.util.Arrays类中提供的sort方法可以直接实现这个功能.*/public class SortByChinese {         public static void main(Str

hibernate中如何用hql做中文排序

用Hibernate+MySQL的童鞋是不是很苦恼为什么MySQL不支持中文排序呢?没办法,只有等utf8_unicode_cn 出来了.如果用hibernate即想实现跨库,又想不改代码如何实现呢,下边告诉你答案. 方法一.描述:给Hibernate的MySQL方言包注册一个排序方法,该方法中实现了MySQL中文排序.贴代码: public class MySQLExtendDialect extends MySQLDialect { public MySQLExtendDialect(){

用TreeMap实现java中英文排序代码

在中文排序中发现不能正排序,这是字符国际化问题引起的,可以实现Comparator接口,使用Collator类来解决! ... import java.text.Collator; public class CollatorComparator implements Comparator { Collator collator = Collator.getInstance(); public int compare(Object element1, Object element2) { Coll

关于Java中文问题的几条分析原则

问题|中文   引言 尽管对于Java中文处理问题的讨论已不乏其数,但由于Java技术涉及内容广(J2EE包含了十几种相关技术),技术供应商繁多,面向Java的Web服务器.应用服务器以及JDBC数据库驱动等都没有官方的标准,所以Java应用在处理中文过程中出了存在固有的问题外也存在随着选用的服务器,驱动程序的不同而带来的Java中文问题的多变性,增加了问题的复杂度.那么,我们如何在这么纷繁的现象中找到问题的症结呢? Java中文问题的一般解决办法 事实上,Java的中文问题都是由于Java应用

Java中文问题及最优解决方法

解决|问题|中文 1.中文问题的来源 计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理.随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的汉字),人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用UNICODE编码,在软件运行时,它获得本地支持系统(多数时间是操作系统)默认支持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认支持

java中文解决大全(下)

解决|中文 4.中文问题的分类及其建议最优解决办法     了解以上JAVA处理文件的原理之后,我们就可以提出了一套建议最优的解决汉字问题的办法.    我们的目标是:我们在中文系统中编辑的含有中文字符串或进行中文处理的JAVA源程序经编译后可以移值到任何其它的操作系统中正确运行,或拿到其它操作系统中编译后能正确运行,能正确地传递中文和英文参数,能正确地和数据库交流中英文字符串.    我们的具体思路是:在JAVA程序转码的入口和出口及JAVA程序同用户有输入输出转换的地方限制编码方法使之正确即

java中文解决大全(上)

解决|中文 说明:本文为作者原创,作者联系地址为:josserchai@yahoo.com.由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题.于是我给出此篇文章,内容包括对控制台运行的class.Servelets.JSP及EJB类中的中文问题我剖析和建议解决办法.希望大家指教. Abstract:本文深入分析了Java程序设计中Java编译器对jav