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

配列内の各単語の最初の文字を比較する方法と、単語を最初の 2 つ、3 つ、または必要なスペースの数と比較し続けるために使用するロジックを知りたいどの単語が最初にあり、次にその単語が続くかを取得する順序。何か案は?

4

2 に答える 2

3

java.lang.Stringjava.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 に答える