4

String 配列を 2 番目の char でソートしたいのですが、位置 "1" の char のインデックスは常に -1 であるため、ソートは機能しません。なにが問題ですか?

String[] wordList = outString.toString().split(", ");

for (int i = 0; i < wordList.length; i++) {
    int n =wordList[i].indexOf(wordList.toString().charAt(1));
}

Arrays.sort(wordList, 1,0);

for (String str : wordList) {
    System.out.println(str);
}
4

4 に答える 4

3

String 型のカスタムComparatorを書きたいとします。

Comparator<String> secondLetterComparator = new Comparator<String>() {
  @Override
  public int compare(String a, String b) {
    return Character.compare(a.charAt(1), b.charAt(1));
  }
};
String[] wordList = { "apple", "orange", "banana" };
Arrays.sort(wordList, secondLetterComparator);
System.out.println(Arrays.asList(wordList));

出力します

[banana, apple, orange]

Character.compare(char, char)まだ Java 7 を使用していないために が利用できない場合は、compareTo()代わりに次の行を使用してください。表現力は劣りますが、同じ効果があります。

return a.charAt(1) - b.charAt(1);

どちらのコードnullも、2 文字以下の文字列を保護しないことに注意してください。

于 2013-04-09T19:04:37.820 に答える
1

私の意見では、あなたが探しているのは次のとおりです。

Arrays.sort(T[] a, Comparator<? super T> c) 

Comparator独自のクラスを作成する必要があります。

public class MyComparator implements Comparator<String>
{
   public int compare(String s1,String s2)
   {
     return s1.charAt(1) - s2.charAt(1);
   }
}

そして、次のように within のコンストラクターを呼び出しMyComaparatorますArrays.sort

Arrays.sort(wordList,new MyComparator());
于 2013-04-09T19:08:18.093 に答える
-1

探しているときにインデックスがありません

 wordList.toString().charAt(1)

wordList[i].toString().charAt(1) である必要があります

于 2013-04-09T19:08:47.580 に答える