String Array中的indexOf错误

时间:2013-04-09 18:56:22

标签: java arrays string sorting

我想用第二个char对String数组进行排序,但位置“1”的char索引始终为-1,因此sort不起作用。有什么问题?

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 个答案:

答案 0 :(得分:9)

wordList.toString().charAt(1)为您提供了toString()的{​​{1}}代表,这可能不是您想要的。

String[]

<强>输出

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

如果您使用自定义Comparator并允许[Ljava.lang.String;@23fc4bec 对您的wordList进行排序(首先将其放入Collections.sort()之后),您应该更容易找到第二个索引的排序。

另请注意,您的拆分包含一个空格,可能会导致更多混淆List

答案 1 :(得分: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个字符的字符串。

答案 2 :(得分: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);
   }
}

然后在MyComaparator内致电Arrays.sort的指导员,如下所示:

Arrays.sort(wordList,new MyComparator());

答案 3 :(得分:-1)

您正在寻找

时缺少索引
 wordList.toString().charAt(1)

应该是      单词表[I]的ToString()。的charAt(1)