`
desert3
  • 浏览: 2159127 次
  • 性别: 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);
		}
		// 输出:
		// 以中国语默认顺序来进行中文排序: = 李四
		// 以中国语默认顺序来进行中文排序: = 刘六
		// 以中国语默认顺序来进行中文排序: = 王五
		// 以中国语默认顺序来进行中文排序: = 张三
    }
}
分享到:
评论

相关推荐

    关于中文英文混合排序javaDemo

    首先,我们要明白在Java中,默认的字符串排序是基于Unicode编码的,这可能会导致中文字符与英文字符混合排序时出现问题。例如,英文字符通常会排在中文字符前面,因为它们的Unicode值更低。为了解决这个问题,我们...

    java 核心API(java.text) 程序例子

    `Collator`提供了比较字符串的能力,可以根据特定的区域设置进行排序或比较。这在处理国际化数据时非常有用,因为不同语言的字符顺序和比较规则可能大不相同。 另外,`ChoiceFormat`允许我们在一定范围内选择不同的...

    字符串的比较

    对于需要考虑语言环境的情况,推荐使用`java.text.Collator`类进行排序。 #### 四、示例代码解析 给出的示例代码展示了如何使用`compareToIgnoreCase()`方法对一个字符串列表进行排序: 1. **初始化字符串列表:*...

    java集合某个字段按照中文拼音排序.docx

    Collator类可以用来比较中文字符串,并且可以根据中文拼音进行排序。 ```java List&lt;String&gt; list = new ArrayList(); list.add("你"); list.add("好"); list.add("啊"); Collections.sort(list, new Comparator() ...

    java 中文姓氏 排序

    `Collator` 类提供了与语言环境相关的字符串排序和比较服务。 2. **Comparator 接口**:这是一个接口,用于定义比较两个对象的自然顺序的方法。 3. **Collections.sort() 方法**:这是一个静态方法,用于对集合进行...

    java冒泡排序java冒泡排序集锦方法!

    ### 知识点一:字符串排序算法在 Java 中的应用 #### 冒泡排序算法实现 冒泡排序是一种简单的排序算法,通过重复遍历要排序的列表,比较每对相邻的元素,并交换它们的位置(如果顺序错误的话),直到没有任何一对...

    JAVA初学教程教你学会JAVA

    `java.text`包为Java开发者提供了强大而灵活的文本处理能力,无论是格式化日期、数字还是处理字符串排序和迭代,都能轻松应对。初学者在学习过程中应该深入理解这些类的功能和用法,以便在实际项目中能够更加高效地...

    Java 中文字符按Unicode排序的实现方法

    在 Java 中,实现中文字符按 Unicode 排序是一件非常重要的事情,特别是在处理中文字符串时。今天,我们将探讨如何使用 Java 语言来实现中文字符按 Unicode 排序。 在 Java 中,String 类提供了默认的比较方案,...

    java中实现汉字按照拼音排序(示例代码)

    总结来说,Java中的`Collator`类为我们提供了方便的中文字符串排序功能,但对于繁体字或特定的排序需求,可能需要自定义`Comparator`来实现。在实际开发中,理解这些基础工具和接口的使用,能够帮助我们更有效地处理...

    Java实现按中文首字母排序的具体实例

    在Java编程中,排序是常见的任务之一,尤其在处理数据集合时...总的来说,Java通过`Collator`和`Comparator`为我们提供了灵活的字符串排序机制,可以方便地处理各种语言环境下的排序需求,包括中文字符串的首字母排序。

    Android sortListview城市人名排序.rar

    3. **GBK编码的比较**:在处理GBK编码的字符串时,Java的默认字符串比较可能无法满足中文排序需求。可以使用`java.text.Collator`类,它可以处理不同语言的排序规则,包括中文。你需要实例化一个Collator对象,并...

    java 中 TreeMap排序

    因为创建`CollationKey`后,比较操作只需要比较两个键,而不是每次都重新计算字符串的排序特征。 总的来说,`TreeMap`提供了一种灵活的方式来存储和检索有序的数据。通过自定义`Comparator`,我们可以按照任何我们...

    Java自定义比较器实现中文排序

    本篇文章将深入探讨如何使用Java自定义比较器(Comparator)来实现中文字符串的正确排序。 首先,我们要了解`compareTo()`方法,这是Java中的一个基础方法,位于`java.lang.Comparable`接口中。`compareTo()`用于比较...

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

    以下是一个使用`Collator`对中文字符串排序的例子: ```java import java.text.Collator; import java.util.Arrays; import java.util.Collections; public class ChineseSort { public static void main...

    Java中的输入汉字拼音首字母即自动显示数据库中相应内容

    Java提供了JDK内置的`java.text`包中的`Collator`类,可以实现对字符串的排序和比较,但并不直接支持汉字转拼音。因此,我们通常需要借助第三方库,如`Pinyin4j`,这是一个专门处理汉字与拼音转换的Java库。 1. **...

    java ArrayList集合中的某个对象属性进行排序的实现代码

    方法二,使用`java.text.RuleBasedCollator`,这允许我们在比较字符串时考虑语言环境: ```java import java.text.RuleBasedCollator; import java.util.Collections; import java.util.Comparator; import java....

    translit.java:从剪贴板翻译俄语名称

    其次,Java的`java.text`包包含了用于国际化和本地化的类,其中`BreakIterator`可以用于分割字符串,`Collator`则用于比较字符串,而`Normalizer`则用于处理Unicode字符的规范化。在处理俄语名称时,可能需要利用`...

    daima.rar_俄文

    对于更复杂的多语言应用,Java还提供了`java.text`包,其中包括`Collator`和`BreakIterator`类,用于排序和分词,以及`Formatter`类,用于格式化和本地化输出。这些工具使得Java成为开发国际化软件的理想选择。

    ChineseCharToEn

    2. **Collator**:这个类主要用于比较和排序字符串,它支持各种语言的排序规则。在获取拼音首字母时,我们可以利用`Collator`的`get Decomposition()`方法,它返回一个表示字符分解的标志,有助于我们解析汉字的拼音...

    icu for android

    开发者可以使用Android SDK提供的`java.text`包,间接调用ICU的功能,如`SimpleDateFormat`用于日期和时间格式化,`DecimalFormat`用于数字格式化,`Collator`进行文本比较等。 **5. 自定义构建:** 对于有特殊需求...

Global site tag (gtag.js) - Google Analytics