英文:
Sort ArrayList<String> containing numbers and letters
问题
我有一个包含'建筑关键字'数字列表的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]
的输出。
我要求的是帮助编写正确的 comparator
或 compareTo
来实现期望的输出。
英文:
I have an ArrayList<String>
containing a list of 'Building Key' numbers.
Forgive me if this has been answered before I am struggling to find a solution by searching.
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);
}
}
This gives me an output of [1, 10, 12, 12C, 2, 21, 3, 32,3B]
I know that this is as expected from Collections.sort
What I need is an output of [1, 2, 3, 3B, 10, 12, 12C, 21, 32]
What I am asking is help to write the correct comparator
or compareTo
to achieve the desired output.
答案1
得分: 0
可以使用一个比较器函数,该函数会将键中的任何非数字字符删除,然后将其解析为整数:
Collections.sort(keys, Comparator.comparing(s -> Integer.parseInt(s.replaceAll("[^\\d]", ""))));
输出:
[1, 2, 3, 3B, 10, 12, 12C, 21, 32]
英文:
You can use a comparator function which strips any non-digit characters out of the key and then parses it to an integer:
Collections.sort(keys, Comparator.comparing(s -> Integer.parseInt(s.replaceAll("[^\\d]", ""))));
Output:
[1, 2, 3, 3B, 10, 12, 12C, 21, 32]
答案2
得分: 0
你可以使用ArrayList.sort,只需通过移除非数字字符来比较整数。
keys.sort(Comparator.comparing(str -> Integer.valueOf(str.replaceAll("\\D+", ""))));
英文:
You can use ArrayList.sort and just compare only integers by removing non digits
keys.sort(Comparator.comparing(str-> Integer.valueOf(str.replaceAll("\\D+",""))));
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论