字符串中的字母字符然后将按字母顺序排列的字符放入新的字符串中?

时间:2015-03-05 20:26:27

标签: java arrays string sorting methods

所以我必须在数组中取一个字符串,将字符串作为所有字符放入一个新数组中,按字母顺序对字符进行排序,然后我需要将新的按​​字母顺序排列的字符串放入一个新字符串中,然后将其打印出来。

我如何创建一个方法来按字母顺序排列字符数组,然后将数组转换为一个字符串?

5 个答案:

答案 0 :(得分:3)

我想你正在寻找这样的东西:

char[] a = ...;
Arrays.sort(a);
String s = new String(a);

答案 1 :(得分:1)

 public static void main(String [] args) {          
    String str = "hello";
    char [] array = str.toCharArray();
    Arrays.sort(array);
    String sortedStr = new String(array);
    System.out.println(sortedStr);
    }

答案 2 :(得分:1)

char[] array = yourString.toCharArry();
Arrays.sort(array);
youNewString = new String(array);

答案 3 :(得分:1)

在Java 8中:

String s = ... ;
String sSorted = Stream.of(s.split(""))
    .sorted()
    .collect(Collectors.joining());

答案 4 :(得分:1)

如果您需要处理混合大小写字符串,例如edcbaABCDEF,那么你需要做一些不同的事情......

其他答案中的Arrays.sort()仅处理数字字符值,因此您将获得edcbaABCDEF => ABCDEFabcde

Arrays.sort(arr,comparator)只能用于包装类型,即Character,而不是char,所以你需要先将它包起来。

Character [] wrapped = new Character[charArray.length];
int i = 0;
for (char c : charArray) {
    wrapped[i++] = c;
}

然后排序

Arrays.sort(wrapped, new Comparator<Character>() {
    @Override
    public int compare(Character o1, Character o2) {
        return Character.compare(Character.toLowerCase(o1),
                Character.toLowerCase(o2));
    }
});

转换回字符串

i = 0;
for (char c : wrapped) {
    charArray[i++] = c;
}
System.out.println(new String(charArray));

==> AaBbCcDdEeF

这可以使用Apache commons lang ArrayUtils helper简化。

String test = "edcbaABCDEF";
Character[] charArray = ArrayUtils.toObject(test.toCharArray());
Arrays.sort(charArray, new Comparator<Character>() {
    @Override
    public int compare(Character o1, Character o2) {
        return Character.compare(Character.toLowerCase(o1),
                Character.toLowerCase(o2));
    }
});
System.out.println(new String(ArrayUtils.toPrimitive(charArray)));