Java:根据匹配的字符串/模式对数组进行排序

标签 java string sorting collections comparator

<分区>

我需要对一个数组进行排序,其中匹配项出现而其他项下降。

例如。我有一个数组:[ z , asxdf , abasdf , abcasdf , b , bc , bcd , c ] 我需要的是当我传递一个关键字假设 "b" 时,它应该对给定的数组进行排序,其中所有以 b.. 开头的字符串将排在第一位,然后之后休息。这将生成最终输出:[ b , bc , bcd , z , c , .. (rest).]

是否可以在 Java 中使用比较器?

String keyWord = "b";
String[] s = {"z", "asxdf", "abasdf", "abcasdf", "b", "bc", "bcd", "c"};
Arrays.sort(s, new Comparator<String>() {

    @Override
    public int compare(String o1, String o2) {

            //Code to sort array according to need

    }
});
System.out.println(Arrays.toString(s));

结果 -> [ b , bc , bcd , z , c , ...]

(我可能会使用 List 而不是 Array,或者任何其他可以帮助我解决这个问题的方法)

最佳答案

回答是否可以使用 Comparator 来实现的问题,答案是肯定的:您只需要创建一个新的 Comparator 类而不是创建一个匿名的 Comparator,如下所示:

    class MyComparator implements Comparator<String> {

        private final String keyWord;

        MyComparator(String keyWord) {
            this.keyWord = keyWord;
        }

        @Override
        public int compare(String o1, String o2) {

            if(o1.startsWith(keyWord)) {
                return o2.startsWith(keyWord)? o1.compareTo(o2): -1;
            } else {
                return o2.startsWith(keyWord)? 1: o1.compareTo(o2); 
            }
        }
    }

然后在您的代码中使用该比较器:

    String keyWord = "b";
    String[] s = {"z", "asxdf", "abasdf", "abcasdf", "b", "bc", "bcd", "c"};
    Arrays.sort(s, new MyComparator(keyWord));
    System.out.println(Arrays.toString(s));

关于Java:根据匹配的字符串/模式对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17290105/

相关文章:

java - 解析带有分隔符的字符串并将其加载到映射中?

algorithm - 分解出一个符号方程算法

java - 如何在app中提取网站的html代码

java - 如何用java更新Oracle数据库中的BLOB列

Java SpringMVC 在哪里放置 RepositoryRestMvcConfiguration (@Configuration) 文件

java - 读取文件直到行具有特定值

在 C 编程中比较两个文件以匹配行

python - 用整数替换 pandas DataFrame 的字符串元素

c++ - 2种不同的种类,1个仿函数

javascript - 使用保存键按属性值对 Javascript 对象数组进行排序