4

我想按第二个字符对字符串数组进行排序,但位置“1”处的字符索引始终为-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

9

wordList.toString().charAt(1)为您提供了toString()a 的表示形式String[],这可能不是您想要的。

String [] test = new String [] {"a","b","c"};
System.out.println(test.toString());

输出

[Ljava.lang.String;@23fc4bec

如果您使用自定义Comparator并允许Collections.sort()对 wordList 进行排序(将其放入List第一个索引之后),您应该会发现按第二个索引进行排序更容易。

另请注意,您的拆分包含可能导致更多混乱的空格split(", ");

于 2013-04-09T18:58:10.277 回答
3

您想为 String 类型编写自定义比较器,例如

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

然后调用MyComaparatorwithin的构造函数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 回答