对包含数字和字母的ArrayList <String>进行排序

时间:2020-08-24 02:37:15

标签: java string sorting arraylist comparator

我有一个ArrayList<String>,其中包含“建筑物钥匙”编号列表。
如果您在通过搜索找到解决方案之前已经回答了这个问题,请原谅我。

public class SortKeyNumbers {
    
    public static void main(String args[]) {
        
        ArrayList<String> keys = new ArrayList<>();
        
        keys.add("1");
        keys.add("10");
        keys.add("2");
        keys.add("3");
        keys.add("3B");
        keys.add("12");
        keys.add("12C");
        keys.add("21");
        keys.add("32");
        
        Collections.sort(keys);
        
        System.out.println(keys);
        
    }
    
}

这给了我[1, 10, 12, 12C, 2, 21, 3, 32,3B]的输出
我知道这是Collections.sort的预期结果
我需要的是[1, 2, 3, 3B, 10, 12, 12C, 21, 32]

的输出

我要问的是帮助编写正确的comparatorcompareTo以获得所需的输出。

2 个答案:

答案 0 :(得分:0)

您可以使用比较器功能,该功能将从键中剥离所有非数字字符,然后将其解析为整数:

Collections.sort(keys, Comparator.comparing(s -> Integer.parseInt(s.replaceAll("[^\\d]", ""))));

输出:

[1, 2, 3, 3B, 10, 12, 12C, 21, 32]

答案 1 :(得分:0)

您可以使用ArrayList.sort并通过删除非数字来仅比较整数

keys.sort(Comparator.comparing(str-> Integer.valueOf(str.replaceAll("\\D+",""))));