对包含数字和字母的 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]
的输出
我要的是帮助编写正确的 comparator
或 compareTo
以获得所需的输出。
您可以使用比较器函数,从键中去除任何 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+",""))));
我有一个 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]
我要的是帮助编写正确的 comparator
或 compareTo
以获得所需的输出。
您可以使用比较器函数,从键中去除任何 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+",""))));