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;
}
Это будет соответствовать правильному алфавитному порядку, игнорируя заглавные буквы и предпочитая более короткие слова дольше (например, "Дом" перед "Домами").