Java 排序数组不工作
有人能指出为什么分拣在这里不起作用吗Java 排序数组不工作,java,arrays,sorting,Java,Arrays,Sorting,有人能指出为什么分拣在这里不起作用吗 public static void main(String[] args) { String[] errorStr = new String[] { "Line No: " + " " + 1, "Line No: " + " " + 11, "Line No: " + " " + 10, "Line No: " + " " + 2, "Line No: " + "
public static void main(String[] args) {
String[] errorStr = new String[] {
"Line No: " + " " + 1,
"Line No: " + " " + 11,
"Line No: " + " " + 10,
"Line No: " + " " + 2,
"Line No: " + " " + 3
};
Arrays.sort(errorStr);
for(Object obj : errorStr){
System.out.println(obj);
}
}
它是按字典顺序排序的——按字典顺序,“11”排在“2”之前,“11号行”排在“2号行”之前 如果您想要“更智能”的排序,您需要实现一个
比较器
,它执行适当的解析以比较字符串
如果所有的值都是“Line No:”后跟一个值,我会将它们转换成一个数组或整数列表,因为这是您试图表示的自然数据。。。对int
值数组进行排序将如您所期望的那样有效
从根本上说,这就是将数字作为字符串处理所得到的结果:)它是按字典顺序排序的——按字典顺序,“11”在“2”之前,而“11”在“2”之前 如果您想要“更智能”的排序,您需要实现一个
比较器
,它执行适当的解析以比较字符串
如果所有的值都是“Line No:”后跟一个值,我会将它们转换成一个数组或整数列表,因为这是您试图表示的自然数据。。。对int
值数组进行排序将如您所期望的那样有效
从根本上说,这就是将数字作为字符串处理的结果:)正如Jon所说,这是按字典顺序对元素进行排序。您可以尝试使用所需的数字创建一个int数组,对其进行排序,然后将“行号:”连接到每个元素。我猜解决方案策略某种程度上取决于元素最初是如何无序的 编辑:这是代码示例
expected is,
Line No: 1
Line No: 2
Line No: 3
Line No: 10
Line No: 11
Actual is,
Line No: 1
Line No: 11
Line No: 10
Line No: 2
Line No: 3
int[]errorInt=newint[]{1,11,10,2,3};
String[]errorString=新字符串[errorInt.length];
数组。排序(errorInt);
for(int i=0;i
正如Jon所说,它是按字典顺序对元素进行排序。您可以尝试使用所需的数字创建一个int数组,对其进行排序,然后将“行号:”连接到每个元素。我猜解决方案策略某种程度上取决于元素最初是如何无序的
编辑:这是代码示例
expected is,
Line No: 1
Line No: 2
Line No: 3
Line No: 10
Line No: 11
Actual is,
Line No: 1
Line No: 11
Line No: 10
Line No: 2
Line No: 3
int[]errorInt=newint[]{1,11,10,2,3};
String[]errorString=新字符串[errorInt.length];
数组。排序(errorInt);
for(int i=0;i
或者,编写一个特殊类,将行号保存在适当的int
字段中,并实现Comparable
,在将它们转换为String
@LouisWasserman:请参见我的编辑-看起来对整数集合的简单转换更适合我:)请参见:或者,编写一个特殊类,将行号保存在适当的int
字段中,并实现Compariable
,在将它们转换为String
@LouisWasserman之前,请对它们进行排序:请参阅我的编辑-看起来对整数集合的简单转换更适合我:)请参阅:我遇到了类似的问题,您的解决方案听起来可能对我有效。你有一个非常快速和肮脏的例子,你可以编辑吗?我有类似的问题,你的解决方案听起来可能对我有用。你有没有一个很快又脏的例子可以编辑?