zoukankan      html  css  js  c++  java
  • 【Java】自定义排序器StringComparator

    功能:字符串直接排序,常常出现‘11’,‘12’等排在10后面缺在2,3等前面的情况,该排序器能在字符串能合理转化为数字时按数字排序,从而能使数字字符串按真正的顺序来,11,12等不再插队;党字符串不能合理转化为数字时便仍然按字符串排序。

    定义:

    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    import java.util.regex.Pattern;
    
    public class StringComparator implements Comparator<String>{
    
        @Override
        public int compare(String s1, String s2) {
            if(isInteger(s1) && isInteger(s2)) {
                int i1=Integer.parseInt(s1);
                int i2=Integer.parseInt(s2);
                
                return i1-i2;
            }
            
            return s1.compareTo(s2);
        }
    
        /**
         * 判断字符串是否整数
         * @param s
         * @return
         */
        private static boolean isInteger(String s) {
            Pattern p=Pattern.compile("[0-9]+");
            return p.matcher(s).matches();
        }
        
    }

    使用:

            String[] arr= {"1","2","3","10","11","12","13","哈哈","嘻嘻"};
            List<String> ls=Arrays.asList(arr);
            
            System.out.println("--------直接按字符串排序的结果---------");
            Collections.sort(ls);
            
            for(String s:ls) {
                System.out.println(s);
            }
            
            System.out.println("--------利用StringComparator排序的结果---------");
            
            Collections.sort(ls,new StringComparator());
            
            for(String s:ls) {
                System.out.println(s);
            }

    输出:

    --------直接按字符串排序的结果---------
    1
    10
    11
    12
    13
    2
    3
    哈哈
    嘻嘻
    --------利用StringComparator排序的结果---------
    1
    2
    3
    10
    11
    12
    13
    哈哈
    嘻嘻

    END

  • 相关阅读:
    6-1
    4-9
    4-5
    4-4
    4-3
    3-10
    作业三2
    作业三1
    课堂练习二
    实验三
  • 原文地址:https://www.cnblogs.com/heyang78/p/15768810.html
Copyright © 2011-2022 走看看