Как отсортировать массив без учета заглавных букв?

1

Я использую sort() для сортировки массива в алфавитном порядке, но он делает это от AZ до az. Я пытаюсь загладить каждое слово заранее, но оно не работает, если оно не распечатывается, что должно происходить после сортировки. На данный момент, с этим кодом, он будет перечислять зрачки заглавными буквами, но если бы он был введен как строчный, он будет отсортирован как строчный. Помещение capize() в начальный цикл 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);
}

}
Теги:
arrays
sorting

2 ответа

5
Лучший ответ

Как насчет использования Arrays.sort() с помощью компаратора? Обратите внимание, что в String имеется подходящий компаратор, поэтому:

Arrays.sort(aay, String.CASE_INSENSITIVE_ORDER);

должен выполнять эту работу.

  • 1
    Там даже один уже сделан: String.CASE_INSENSITIVE_ORDER
  • 0
    Это будет работать только для символов ASCII. Например, строка «пират» будет отсортирована перед «пиньята». Правильный способ сортировки по алфавиту - с помощью Collator , обычно получаемого с помощью Collator.getInstance () .
0

Я предлагаю хранить все данные в массиве в нижнем регистре. Это упростит сортировку, а также поиск (если вы ищете студента в массиве, и он был введен как, скажем, "Уолтер", и вы ищете "walter", вы его не найдете. Если вы используете строчные буквы для хранения и поиска, он будет работать).

И так как вы в любом случае используете имена для печати, имена будут по-прежнему отображаться заглавными.

Поэтому вместо того, чтобы делать

        ay[i] = scan.nextLine();

Ты можешь сделать:

        ay[i] = scan.nextLine().toLowerCase();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню