test && sort test > test2 我明白 a [a 但在 Java 中,[a 位于 a 之前。是否可以让它像-6ren">
gpt4 book ai didi

java - 让 Java 在字母之后对符号进行排序(就像 Linux 排序一样)

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:45 26 4
gpt4 key购买 nike

当我在 Linux 中进行排序时:

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

我明白

a
[a

但在 Java 中,[a 位于 a 之前。是否可以让它像 Linux 一样工作?

最佳答案

因此,首先,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 .

关于java - 让 Java 在字母之后对符号进行排序(就像 Linux 排序一样),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com