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

Sort ArrayList<String> containing numbers and letters

我有一个 ArrayList<String> 包含 'Building Key' 个数字的列表。
如果在我努力通过搜索找到解决方案之前已经回答了这个问题,请原谅我。

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 以获得所需的输出。

您可以使用比较器函数,从键中去除任何 non-digit 个字符,然后将其解析为整数:

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

输出:

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

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

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