使用自定义排序对字符串数组进行排序 [英] Sorting an array of String with custom ordering

查看:40
本文介绍了使用自定义排序对字符串数组进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 String 数组:

 String[] str = {"ab" , "fog", "dog", "car", "bed"};
 Arrays.sort(str);
 System.out.println(Arrays.toString(str));

如果我使用Arrays.sort,输出是:

 [ab, bed, car, dog, fog]

但我需要实现以下顺序:

But I need to implement the following ordering:

FCBWHJLOAQUXMPVINTKGZERDYS

我想我需要实现 Comparator 并覆盖 compare 方法:

I think I need to implement Comparator and override compare method:

 Arrays.sort(str, new Comparator<String>() {

        @Override
        public int compare(String o1, String o2) {
            // TODO Auto-generated method stub
            return 0;
        }
    });

我应该如何解决这个问题?

How should I go about solving this?

推荐答案

final String ORDER= "FCBWHJLOAQUXMPVINTKGZERDYS";

Arrays.sort(str, new Comparator<String>() {

    @Override
    public int compare(String o1, String o2) {
       return ORDER.indexOf(o1) -  ORDER.indexOf(o2) ;
    }
});

您还可以添加:

o1.toUpperCase()

如果您的数组不区分大小写.

If your array is case in-sensitive.

显然 OP 不仅要比较字母,还要比较字母串,所以有点复杂:

Apparently the OP wants to compare not only letters but strings of letters, so it's a bit more complicated:

    public int compare(String o1, String o2) {
       int pos1 = 0;
       int pos2 = 0;
       for (int i = 0; i < Math.min(o1.length(), o2.length()) && pos1 == pos2; i++) {
          pos1 = ORDER.indexOf(o1.charAt(i));
          pos2 = ORDER.indexOf(o2.charAt(i));
       }

       if (pos1 == pos2 && o1.length() != o2.length()) {
           return o1.length() - o2.length();
       }

       return pos1  - pos2  ;
    }

这篇关于使用自定义排序对字符串数组进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆