我想用第二个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);
}
答案 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)