我正在尝试对两种不同类型的数组进行排序。我正在按工作的数字顺序对整数数组进行排序,我还需要按字母顺序对字符数组进行排序。我在对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]);
}
}
}
答案 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 + " "));