Java排序问题当字符串部分相等时

请问在对比字符串大小时,字符串部分相同,我该怎么实现降序排列?如果我用compareTo(),它在 字符串不相同但对比部分相同时,返回字符串长度的差值,那么比如对比字符串a2,a9,a1的大小时,用它就是无效的

该回答引用ChatGPT

在 Java 中,你可以使用 Comparator 接口来实现自定义的排序规则。在这种情况下,你可以创建一个 Comparator 对象,该对象将按照你指定的排序规则对字符串进行排序。

对于字符串的降序排列,你可以使用以下方法:



import java.util.Comparator;

public class StringDescendingComparator implements Comparator<String> {
    @Override
    public int compare(String str1, String str2) {
        // 对比字符串的部分相同部分
        String commonPart1 = str1.substring(0, Math.min(str1.length(), str2.length()));
        String commonPart2 = str2.substring(0, Math.min(str1.length(), str2.length()));
        int result = commonPart2.compareTo(commonPart1);

        // 如果部分相同的部分已经不同了,那么就按照字符串的长度来排序
        if (result != 0) {
            return result;
        } else {
            return Integer.compare(str2.length(), str1.length());
        }
    }
}

这里创建了一个名为 StringDescendingComparator 的类,它实现了 Comparator 接口。在 compare 方法中,我们首先比较了两个字符串的相同部分,如果它们不同,则返回它们之间的比较结果;否则,我们按照字符串长度的差值进行排序。这样,如果部分相同的字符串的长度相同,则较长的字符串将排在前面。

差值总有正负吧,正负不就代表大小顺序么

重写Compare方法自己定义把字符串分割为字符再转为int型的ASCII码 最后根据ASCII码之和排序

直接放数组里sort一下,就按照字典顺序升序了,比如a, boot, be 排序完就是 a be boot