【发布时间】:2022-01-22 18:56:16
【问题描述】:
我有一个字符串数组,中间有一个空格。我想根据空格之前的第一个子字符串对内容进行排序,然后是空格之后的子字符串。
例如,如果我的数组是这样的:{"Henry 123", "Henry 234", "David 123", "David 234"},最后我想要{"David 123", "David 234", "Henry 123", "Henry 234"}。
我尝试在下面实现一个新的比较器:
import java.util.*;
public class MyClass {
public static void main(String args[]) {
String[] str_arr = {"Henry 123", "Henry 234", "David 123", "David 234"};
Collections.sort(str_arr, new Comparator<String>(){
public int compare(String s1, String s2) {
String[] str1 = s1.split(" ");
String[] str2 = s2.split(" ");
if(str1[0].compareTo(str2[0]) != 0) {
return str1[0].compareTo(str2[0]);
}
return str1[1].compareTo(str2[1]);
}
});
for (int i = 0; i < str_arr.length; i++) {
System.out.printf("%s, ", str_arr[i]);
}
}
}
但我收到此错误:
MyClass.java:7: 错误:没有找到适合排序的方法(String[],
) Collections.sort(str_arr, new Comparator(){ ^ 方法 Collections. sort(List ) 不适用 (无法推断类型变量 T#1 (实际参数列表和形式参数列表的长度不同)) 方法 Collections. sort(List ,Comparator super T#2>) 不适用 (无法推断类型变量 T#2 (参数不匹配;String[] 无法转换为 List )) 其中 T#1,T#2 是类型变量: T#1 扩展了 Comparable super T#1> 在方法 sort(List ) 中声明 T#2 扩展方法中声明的对象 sort(List ,Comparator super T#2>) 1 个错误
这个错误听起来像是Collections framework不支持排序字符串,没有多大意义。
【问题讨论】:
-
您希望
{ "Henry 123", "Henry 23", "David 53", "David 234" }的排序顺序是什么?请显示预期结果。 -
也许我遗漏了一些东西,但拆分字符串似乎没有必要。您正在比较第一个字符串,如果它们相同,则比较第二个字符串,但仅比较整个字符串将给出完全相同的结果...
-
@magicmn 没错,我最初认为比较数字和数字字符串会产生相同的结果,但正如 WJS 指出的那样,事实并非如此。
标签: java collections