按字符串里的数字排序

按字符串里的数字排序ide

给出的字符串结构是前边是字母、后边为数字,例如wew0145,要求给出一组数据,按照后边的数字从小到大排序。code

输入排序

wr0068,lt01,qhy0027828,gh20425256,xj0033258,zmj00505562字符串

输出string

lt01,wr0068,qhy0027828,xj0033258,zmj00505562,gh20425256
 it

 

//按字符串里的数字排序
// 输入 "wr0068,lt01,qhy0027828,gh20425256,xj0033258,zmj00505562";
//输出  [lt01, wr0068, qhy0027828, xj0033258, zmj00505562, gh20425256]


public class StringSortNumer {
    public static void main(String arg[]){
        String str ="wr0068,lt01,qhy0027828,gh20425256,xj0033258,zmj00505562";
        List<String> strlist = Arrays.asList(str.split(","));
        List<String> sortlist = strlist.stream().sorted((a,b)->Integer.valueOf(subStrChar(a)).compareTo(Integer.valueOf(subStrChar(b)))).collect(Collectors.toList());
//两种排序都正确 
   /*   Collections.sort(strlist, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                int num1=Integer.parseInt(subStrChar(s1));
                int num2=Integer.parseInt(subStrChar(s2));
                return num1-num2;
            }
        });*/
        System.out.println(sortlist);
    }
    // 处理字符串和数字,使用char类型断定字符仍是数字,并截取
    public static String subStrChar(String st){
        if (StringUtils.isBlank(st)){
            return null;
        }
        int stopPos=st.length();
        for (int i=0;i<st.length();i++){  //// 遍历 st 的字符
            char c =st.charAt(i);
            if (c>='0' && c<='9'){    // 若是当前字符是数字
                stopPos=i;
                break;
            }
        }
        return st.substring(stopPos,st.length());
    }
}