整数和字符的数组排序

时间:2019-01-25 14:04:41

标签: java arrays sorting

我正在尝试对两种不同类型的数组进行排序。我正在按工作的数字顺序对整数数组进行排序,我还需要按字母顺序对字符数组进行排序。我在对Character数组进行排序时遇到了一些麻烦。我的老师想让我们对大写字母进行排序,他希望他们在打印数组时保持大写字母不变。首先,我将Character数组转换为小写形式,以便对其进行正确排序。但是我如何让角色返回资本而不弄乱顺序。

import java.util.*;
public class MyProgram extends ConsoleProgram
{
   int[] numbers = {4, 2, 3, 1, 11, 9};
   Character[] characters = {'z', 'c', 'a', 'q', 'B', 'g'};

public void run()
{
   Arrays.sort(numbers);
   System.out.println(Arrays.toString(numbers));


    Arrays.sort(characters);
    for(int i = 0; i < characters.length; i++)
    {
        if(Character.isUpperCase(characters[i]))
        {
            characters[i] = Character.toLowerCase(characters[i]);
            Arrays.sort(characters);

        }
        System.out.println(characters[i]);
    }
  }
}

4 个答案:

答案 0 :(得分:1)

我将其转换为字符串数组,不区分大小写对其进行排序,然后将其转换回字符数组。

public char[] sortArray(char[] arr) {
    // Creating a blank string array
    String [] end = new String[arr.length];

    // Converting (char) arr array to (string) end array.
    for(int i = 0; i < arr.length; i++) {
        end[i] = "" + arr[i];
    }

    // Sorts the end array ignoring case
    Arrays.sort(end, String.CASE_INSENSITIVE_ORDER);

    // Converting (string) end array to (char) arr array.
    for(int i = 0; i < arr.length; i++) {
        arr[i] = end[i].charAt(0);
    }

    // Returns arr aray
    return arr;
}

答案 1 :(得分:1)

更干净的方法:

Java 8 +

Arrays.sort(characters, (c1, c2) -> Character.toLowerCase(c1) - Character.toLowerCase(c2));

Java 7及更低版本

Arrays.sort(characters, new Comparator<Character>() {

    @Override
    public int compare(Character c1, Character c2) {
        return Character.toLowerCase(c1) - Character.toLowerCase(c2);
    }

});

答案 2 :(得分:1)

这是另一种可能性:

    Character[] characters = {'z', 'c', 'a', 'q', 'B', 'g'};
    Arrays.sort(characters, (c1,c2) -> Character.compare(
            Character.toLowerCase(c1), Character.toLowerCase(c2)));

答案 3 :(得分:0)

如果可以使用Java 8或更高版本,则可以使用Stream API对数组进行排序并将数组中的元素打印到控制台:

    Character[] characters = {'z', 'c', 'a', 'q', 'B', 'g'};
    Stream.of(characters)
            .sorted((o1, o2) -> o1.toString().compareToIgnoreCase(o2.toString()))
            .forEach(character -> System.out.print(character + " "));