如何使用Java按字母顺序排序字符串

10

我想在JAVA中按字母顺序对字符串进行排序,如下所示: 大写字母和小写字母相互跟随 AaBbCcDdEeFfGg。 例如,如果我输入AbaC,则返回AabC。 谢谢!


7
还为时过早祝福新年,在那之前你需要展现出一些努力。你到目前为止尝试了什么? - Jeroen Vannevel
3个回答

13

如果你先将这些字符放入一个数组中,Arrays.sort可以帮助你完成排序。(为了使用自定义的不区分大小写比较器,它必须是Character对象数组而不是char原始类型数组。)

// put the characters into an array
Character[] chars = new Character[str.length()];
for (int i = 0; i < chars.length; i++)
    chars[i] = str.charAt(i);

// sort the array
Arrays.sort(chars, new Comparator<Character>() {
    public int compare(Character c1, Character c2) {
        int cmp = Character.compare(
            Character.toLowerCase(c1.charValue()),
            Character.toLowerCase(c2.charValue())
        );
        if (cmp != 0) return cmp;
        return Character.compare(c1.charValue(), c2.charValue());
    }
});

// rebuild the string
StringBuilder sb = new StringBuilder(chars.length);
for (char c : chars) sb.append(c);
str = sb.toString();

这将分割UTF-16代理项。 - Mike Samuel

8

您可以尝试查找Collections.sort, 然后按照以下方式尝试:

Collections.sort(caps, String.CASE_INSENSITIVE_ORDER);

类似于这样:

private static Comparator<String> ALPHA_ORDER = new Comparator<String>() {
    public int compare(String str1, String str2) {
        int x = String.CASE_INSENSITIVE_ORDER.compare(str1, str2);
        if (x== 0) {
            x= str1.compareTo(str2);
        }
        return x;
    }
};

Collections.sort(list, ALPHA_ORDER);

编辑:

若要按字母顺序对字符串进行排序,请尝试以下方法:

Collator col = Collator.getInstance(new Locale("en", "EN"));
String s = "AbaC";
String[] s1= s.split("");
Arrays.sort(s1, col);
String sorted = "";
for (int i = 0; i < s1.length; i++)
{
  sorted += s1[i];
}
System.out.println(sorted);

1
OP想要对字符串中的字符进行排序,而不是对字符串列表进行排序。 - Boann
这只是将字符串转换为字符列表的问题,这是微不足道的部分。 - Jeroen Vannevel
@Boann:我更新了我的答案。希望这样会更好? - Rahul Tripathi
现在它不处理不区分大小写的要求。 - Boann
@Boann:是的,我已经纠正了! - Rahul Tripathi
显示剩余2条评论

3
将字符串转换为字符数组,然后比较您排序中每个字符的int值。
所需方法: String.toCharArray();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接