`
desert3
  • 浏览: 2142576 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

java.text.Collator&字符串比较&中文排序

    博客分类:
  • Java
 
阅读更多
默认情况下,字符串的比较使用字符串包含字符的ASCII码来比较。
java.text.Collator使用字符串包含字符在指定语言的自然顺序(譬如中文汉字的自然顺序)做比较。是locale敏感的。

如果只比较纯英文,那么就不需要使用collator。一般情况下我们直接使用Collections.sort()来执行排序操作、或者根据字符的ASCII码来排序。但是,如果其中包含一些特殊字符如é、中文汉字,那边使用collator和默认的collections.sort排序结果并不一致。

// 中文排序,音标字符排序
import java.util.List;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Collections;
import java.text.Collator;

public class StringShortWithCollator {
    public static void main(String[] args) {
		 List<String> fruits = new ArrayList<String>();
	        fruits.add("caffeine");
	        fruits.add("café");
	        fruits.add("cafeteria");
	        Collections.sort(fruits);
	        for (int i = 0; i < fruits.size(); i++) {
	            String fruit = fruits.get(i);

	            System.out.println("orignal sort = " + fruit);
	        }
	        // 输出
	        // orignal sort = cafeteria
	        // orignal sort = caffeine
	        // orignal sort = café
	        
	        // Calendar cal = Calendar.getInstance(); // 使用默认的时区和locale
	        // 指定为美国locale
	        Collator collator = Collator.getInstance(Locale.US);
	        Collections.sort(fruits, collator);

	        for (int i = 0; i < fruits.size(); i++) {
	            String fruit = fruits.get(i);

	            System.out.println("collator sort = " + fruit);
	        }
	        // 输出
	        // collator sort = café
	        // collator sort = cafeteria
	        // collator sort = caffeine

		// 中文排序
		List<String> chineses = new ArrayList<String>();
		chineses.add("张三");
		chineses.add("李四");
		chineses.add("王五");
		chineses.add("刘六");

		Collections.sort(chineses);
		for (int i = 0; i < chineses.size(); i++) {
			String chinese = chineses.get(i);
			System.out.println("默认中文字符串排序: = " + chinese);
		}
		// 输出:
		// 默认中文字符串排序: = 刘六
		// 默认中文字符串排序: = 张三
		// 默认中文字符串排序: = 李四
		// 默认中文字符串排序: = 王五

		Collator collatorChinese = Collator.getInstance(java.util.Locale.CHINA);
		Collections.sort(chineses, collatorChinese);

		for (int i = 0; i < chineses.size(); i++) {
			String chinese = chineses.get(i);
			System.out.println("以中国语默认顺序来进行中文排序: = " + chinese);
		}
		// 输出:
		// 以中国语默认顺序来进行中文排序: = 李四
		// 以中国语默认顺序来进行中文排序: = 刘六
		// 以中国语默认顺序来进行中文排序: = 王五
		// 以中国语默认顺序来进行中文排序: = 张三
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics