java - 如何使用字符串列表的部分数字内容对字符串列表进行排序?

标签 java string sorting arraylist

我正在尝试对 ArrayList<String> 进行排序。列表中的字符串看起来像这个 "abc 123 def 456" ,我想对列表进行排序,使得最后一个数字最小的字符串排在前面,例如如果元素是

{"abc 123 def 456", "ghi 456 jkl 789", "mno 101 pqr 112"}

然后我希望排序列表首先具有第三个字符串,然后是第一个字符串,然后是第二个字符串。

{"mno 101 pqr 112", "abc 123 def 456","ghi 456 jkl 789"}

就像这样。

我尝试使用 list.split(" ")Double.parseDouble(String)Collections.sort(list) 对其进行排序,但我现在不知道如何将字符串的其余部分与排序数字列表正确连接。

编辑:

String[] numbers = list.get(i).split(" ");
numberList.add(Integer.parseInt(numbers[3]));
Collections.sort(numberList);

现在我知道应该如何对数字进行排序,但我无法将它们与“他们的字符串”的其余部分重新连接。

最佳答案

使用自定义比较器的简单解决方案:

String[] arr = {"abc 123 def 456", "ghi 456 jkl 789", "mno 101 pqr 112"};

Arrays.sort(arr, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return getLastNum(o1) - getLastNum(o2);
    }

    private int getLastNum(String s) {
        String[] tokens = s.split(" ");
        return Double.parseDouble(tokens[tokens.length - 1]);
    }
});

希望这段代码是不言自明的。

关于java - 如何使用字符串列表的部分数字内容对字符串列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242408/

相关文章:

c - 如何使用 header <string.h> 中的 strcat() 连接两个指针指向的字符串?

javascript - JS直接访问Concat方法

algorithm - 如何在线性时间内放置 2 个可能值的 "sort"元素?

graphics - 对一维颜色列表进行排序?

java - 如何从流中获取列表列表而不是数组列表?

java - 使用 hbase 处理图像、视频和音频类型

java - 如何将字符串数组带到 TextView 中的下一行?

java - 如何为VBox的 child 设置不同的高度

c++ - C++ 如何使用 == 比较两个字符串?

algorithm - NP问题,需要一些细节?