java - 如何对包含整数的字符串列表进行排序

标签 java string sorting integer

我想对也包含数字的字符串列表进行排序。

例如,我有一个包含元素 "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 不可解析的情况,反之亦然。我不确定 -11 是否正确,所以也许应该交换它们。

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/

相关文章:

java - DebugPlugin.exec() 的用途

java - 无法从 URL 位置导入 bean 定义 [classpath :applicationContext-core. xml]

string - 变量没有在 Perl 字符串中扩展?

java - 在Java中使用正则表达式实现简单的字符串匹配

javascript - 降低矩阵排序的运行时复杂性

java - Activity onCreate 方法的最佳实践是什么?

java - 最少调用 subArrayLeftShift 方法来排序数组(面试题)

c++ - 当第一个字符串在预处理器指令中定义而第二个字符串在 C++ 中为常量时,如何连接 2 个字符串?

javascript - jquery 基于类名的排序不起作用

python - 按重复项对 DataFrame 的行进行排序