我使用sort()按字母顺序对数组进行排序,但它从A-Z到a-z进行排序。我试着事先将每个单词都用尽,但除非它被打印出来,否则它不起作用,这应该在排序后进行。目前,使用此代码,它将使用大写字母列出学生,但如果它以小写形式输入,则将其排序为小写。在将输入分配给数组之后,将capitalize()放在初始for循环中是不行的。有解决方案吗
import java.util.Scanner;
import java.util.Arrays;
public class Pupils {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
boolean loop = true;
int names = 0;
String[] ay = new String[1000];
for(int i = 0; loop == true; i++) {
System.out.println("Enter name: ");
ay[i] = scan.nextLine();
names++;
if (ay[i].equals("0")) {
loop = false;
ay[i] = " ";
}
}
String[] aay = new String[names - 1];
for(int i = 0; i < aay.length; i++) {
aay[i] = ay[i];
}
if (names == 1) {
System.out.print("There are no people in our class.");
} else if (names == 2) {
System.out.print("The person in our class is ");
} else {
System.out.print("The people in our class are ");
}
Arrays.sort(aay);
for(int i = 0; i < names - 1; i++) {
if(i == names - 2) {
System.out.print(capitalize(aay[i]) + ".");
} else if (i == names - 3) {
System.out.print(capitalize(aay[i]) + " and ");
} else {
System.out.print(capitalize(aay[i]) + ", ");
}
}
}
public static String capitalize(String line)
{
return Character.toUpperCase(line.charAt(0)) + line.substring(1);
}
}
答案 0 :(得分:6)
使用Arrays.sort()
with a Comparator怎么样?请注意,有一个suitable comparator defined in String
,所以:
Arrays.sort(aay, String.CASE_INSENSITIVE_ORDER);
应该做的。
答案 1 :(得分:0)
我建议以小写形式存储数组中的所有数据。它将简化排序和搜索(如果您搜索阵列中的学生,并输入为“Walter”,并且您正在寻找“walter”,您将找不到它。如果您使用小写,则对于存储和搜索,它将起作用。)
由于您无论如何都要将名称大写,因此名称仍将显示为大写。
所以不要做
ay[i] = scan.nextLine();
你可以这样做:
ay[i] = scan.nextLine().toLowerCase();