0

我正在尝试制作一个程序,在该程序中我要求用户输入单词,然后程序将它们按字母顺序排列。这是我到目前为止所得到的:

    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();
        }
      }
    }

我想知道如何比较数组中每个单词的第一个字母,以及我将使用什么逻辑来继续将该单词与前两个、三个或它需要进入多少个空格进行比较为了得到哪个单词先出现,然后是它之后的单词。有任何想法吗?

4

2 回答 2

3

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);
于 2013-08-30T19:36:01.133 回答
0

虽然有点冗长,但这是我用来按字母顺序排列字符串的方法:

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;
}

这将符合正确的字母顺序,忽略大写字母并偏爱较短的单词而不是较长的单词(例如“Houses”之前的“House”)。

于 2013-08-30T20:08:20.407 回答