在字母表后进行Java排序符号(如Linux排序)

时间:2014-03-08 06:43:54

标签: java string sorting

当我在Linux中进行排序时:

echo -en "[a\na" > test && sort test > test2

我得到了

a
[a

但是在[a之前,a出现了{{1}}。有可能让它像Linux一样工作吗?

1 个答案:

答案 0 :(得分:1)

首先,sort命令的排序顺序取决于语言环境(尤其是LC_COLLATE)。将LC_ALL设置为C后,排序顺序将与Java相同:

$ echo -ne "[a\na" | LC_ALL=C sort
[a
a
$

因此,如果您只是使用普通的Java排序并首先放置字母和数字,那么您可以使用类似的东西:

final List<String> lst = new ArrayList<String>();
lst.add("[a");
lst.add("a");

Collections.sort(lst, new Comparator<String>() {
    @Override
    public int compare(final String s1, final String s2) {
        if (s1==s2)
            return 0;
        if (s1==null)
            return 1;
        if (s2==null)
            return -1;
        for (int i=0; i<s1.length()&&i<s2.length(); i++)
            if (Character.isLetterOrDigit(s1.charAt(i)) | Character.isLetterOrDigit(s2.charAt(i))) {
                return Character.isLetterOrDigit(s1.charAt(i))?-1:1;
            } else if (s1.charAt(i)!=s2.charAt(i))
                break;
        return s1.compareTo(s2);
    }
});

for (final String str: lst)
    System.out.println(str);

但如果你想要更复杂的东西,基于LC_COLLATE,你必须使用Collator,也许define your own RuleBasedCollator