论坛首页 移动开发技术论坛

String在不同OS下的排序问题解决办法

浏览 2724 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-20  

String在不同OS下的排序问题:


在windows中,如果调用Arrays.sort(Object[] a)对File进行自然排序是大小写不敏感的,顺序是aAbBcCdD...........


而如果在UNIX或LINUX下进行相同的操作则是大小写敏感的,其自然排序规则是ABCD...Zabcd....z


如果希望在不同的OS下实现相同的排序效果(对fileName排序),那么就不能使用使用Arrays.sort(Object[] a)


首先应该构造一个比较器,在其中定义rule,然后调用Arrays.sort(T[] a,Comparator<!----> c)


下面是一个简单的例子:

import java.util.*;
import java.text.*;
 
public class TagalogDictionary
{
  public String[] sortWords(String[] words) throws Exception
  {
    String rule = "< a< b< k< d< e< g< h< i< l< m< n< o< p< r< s< t< u< w< y";
    Arrays.sort(words, new RuleBasedCollator(rule));
   
    return words;
  }
}
通过这样的强制排序,在任何OS下String的排序问题就取得了一致.

对RuleBasedCollator类的简单说明:
RuleBasedCollator 类是 Collator 的具体子类,它提供了一个简单的、数据驱动的表 collator。
可以通过此类来创建基于表的自定义 Collator。RuleBasedCollator 将字符映射到排序键。

为了提高效率,对 RuleBasedCollator 做了如下限制(其他子类可以用于更复杂的语言):

1如果指定了由 <modifier></modifier>控制的特殊整理规则,则它将用于整个 collator 对象。
2所有未指定的字符位于整理顺序的末尾。

论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics