我想对也包含数字的字符串列表进行排序。
例如,我有一个包含元素 "1,2,3,4,5,11,12,21,22,31,32,A101,A102,A103,A104,B405"
.
如果我使用 Collection.sort 方法意味着输出为 "1,11,12,2,21,22,3,31,32... "
。
如果我使用比较器函数意味着它给出
输出为 "1,2,3,4,5,11,12,21,22,31,32,A101..."。
但我需要显示为
"A101,A102,A103,A104,B405,1,2,3,4,5,11,12,21,22,31,32"
请大家给我一个解决方案。提前致谢。
最佳答案
实现您自己的比较器,尝试将要比较的对象转换为整数,如果成功,则使用 Integer 类的compareTo,否则使用 String 类的compareTo。
像这样:
public class MyComparator implements Comparator<String,String>
{
public int compare(String s1, String s2)
{
try
{
int i1 = Integer.parseInt(s1);
int i2 = Integer.parseInt(s2);
return i1 - i2;
}
catch (NumberFormatException e)
{
return s1.compareTo(s2);
}
}
}
ArrayList<String> myList = (...);
Collections.sort(myList,new MyComparator());
正如评论所述,这类似于 1,12,A102,A103
。但想要的是:A102,A103,1,12
。为此,我们需要处理 s1
可解析为 int 而 s2
不可解析的情况,反之亦然。我不确定 -1
和 1
是否正确,所以也许应该交换它们。
public class MyComparator implements Comparator<String,String>
{
public int compare(String s1, String s2)
{
Integer i1 = null
Integer i2 = null
try
{
i1 = Integer.parseInt(s1);
}
catch (NumberFormatException e) {}
try
{
i2 = Integer.parseInt(s2);
}
catch (NumberFormatException e) {}
if (i1 == null && i2 == null)
return s1.compareTo(s2);
if (i1 == null && i2 != null)
return -1;
if (i1 != null && i2 == null)
return 1;
return i1 - i2;
}
}
关于java - 如何对包含整数的字符串列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23467470/