对前面含有数字的字符串进行排序输出,【2GE、21GE、GE、100GE】

需求为:[2GE、21GE、GE、100GE]排序输出为[GE, 2GE, 21GE, 100GE]。
第一时间条件反射写成如下:

import java.util.*;

public class ArraysDemo {
    public static void main(String[] args) {
        List<String> stringList=new LinkedList<>();
        stringList.add("2GE");
        stringList.add("21GE");
        stringList.add("GE");
        stringList.add("100GE");
        Collections.sort(stringList);
        System.out.println(stringList);
}
}

输出为:

[100GE, 21GE, 2GE, GE]

以上代码无法实现需求,改为以下代码实现:

import java.util.*;

public class ArraysDemo {
    public static void main(String[] args) {
        List<String> stringList=new LinkedList<>();
        stringList.add("2GE");
        stringList.add("21GE");
        stringList.add("GE");
        stringList.add("100GE");
        //进行比较
        Collections.sort(stringList, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                String ge = (o1.substring(0, o1.indexOf("GE") ))==""?"0":o1.substring(0, o1.indexOf("GE"));
                String ge1 = (o1.substring(0, o2.indexOf("GE") ))==""?"0":o1.substring(0, o2.indexOf("GE"));
                if(isNumber(ge)&&isNumber(ge1)){
                   return Integer.parseInt(ge)- Integer.parseInt(ge1);
                }else {
                    return  ge.compareTo(ge1);
                }
            }
        });
        System.out.println(stringList);
    }
    /**
     * 判断是否为一个数的字符串
     * @param num
     * @return
     */
   static boolean isNumber(String num){
        try{
            Integer.parseInt(num);
        }catch (Exception e){
            return false;
        }
        return true;
    }
}

输出结果为:

[GE, 2GE, 21GE, 100GE]
原创文章 34 获赞 20 访问量 1132

猜你喜欢

转载自blog.csdn.net/qq_22744093/article/details/104848489
Ge
今日推荐