当我在Linux中进行排序时:
echo -en "[a\na" > test && sort test > test2
我得到了
a
[a
但是在[a
之前,a
出现了{{1}}。有可能让它像Linux一样工作吗?
答案 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
。