Java Alphabetizer

Я пытаюсь сделать программу, в которой я прошу пользователя ввести слова, а затем программа помещает их в алфавитном порядке. Вот что у меня так далеко:

    import java.util.Scanner;
    public class WordAlphabeticalizer {

/**
 * @param args
 */
public static void main(String[] args) {
    // Variables and Objects
    String arraylength;
    Scanner input = new Scanner (System.in);
    // Code
    System.out.println("Please input how many terms you would like to alphabetize"):                                                                    
    arraylength = input.nextLine();
    String[] words = new String[Integer.parseInt(arraylength)];

    for(int index = 0; index < words.length; index ++){
        System.out.println("Please input word number " + (index + 1) + ":");
        words[index] = input.nextLine();
        }
      }
    }

Я хотел бы знать, как идти о сравнении первых букв каждого слова в массиве, и какую логику я бы использовал, чтобы продолжать сравнивать слово с первыми двумя, тремя или с каким количеством пробелов нужно вводить Чтобы узнать, какое слово идет первым, а затем слово, которое идет после него. Есть идеи?

2 ответа

java.lang.String реализует java.lang.Comparable интерфейс, так что вы можете отсортировать их, добавив их в отсортированную коллекцию (Попробуйте java.util.TreeSet)

Set<String> stringsToSort = new TreeSet<String>();
stringsToSort.add("Fish");
stringsToSort.add("Dog");
stringsToSort.add("Cat");

System.out.println(stringsToSort);

Хотя это немного многословно, этот метод я использовал для алфавитизации строк:

public static String[] alphabetise(final String[] array)
{
    Arrays.sort(array, new Comparator<String>()
    {
        @Override
        public int compare(final String o1, final String o2)
        {
            if(o1 == null && o2 == null)
            {
                return 0;
            }
            else if(o1 == null)
            {
                return -1;
            }
            else if(o2 == null)
            {
                return 1;
            }
            else if(o1.equals(o2))
            {
                return 0;
            }
            else if(o1.isEmpty())
            {
                return -1;
            }
            else if(o2.isEmpty())
            {
                return 1;
            }
            final Character[] c1 = toCharacterArray(o1.toLowerCase());
            final Character[] c2 = toCharacterArray(o2.toLowerCase());
            final int max = Math.max(c1.length, c2.length);
            for(int i = 0; i < max; i++)
            {
                if(i < c1.length && i < c2.length)
                {
                    final int comp = c1[i].compareTo(c2[i]);
                    if(comp != 0)
                    {
                        return comp;
                    }
                }
                else return new Integer(c1.length).compareTo(new Integer(c2.length));

            }
            return 0;
        }
    });
    return array;
}

static Character[] toCharacterArray(final String str)
{
    if(str == null || str.isEmpty()) return new Character[0];
    final Character[] array = new Character[str.length()];
    int counter = 0;
    for(final char c : str.toCharArray())
    {
        array[counter++] = c;
    }
    return array;
}

Это будет соответствовать правильному алфавитному порядку, игнорируя заглавные буквы и предпочитая более короткие слова дольше (например, "Дом" перед "Домами").

Другие вопросы по тегам