6.对多个字符串进行排序,不能使用jdk现成对类。在排序中,比如字符串”Bc”,”Ad”,”ac”,”hello,”X man”,”little”,”During”,”day”能够排序成”Ad”,”ac”,”Bc”,”During”,”day”,”Hello”,”little”,”X man”   如 先大写A小写a  大写B小写b

解决方案 »

  1.   

    两层循环,然后转换为字符数组比较,参考了下。
    package com.js.task.util;import java.io.IOException;
    import java.util.Arrays;public class Test9 {
    public static void main(String args[]) throws IOException,
    InterruptedException {
    String[] sarr = { "Bc", "Ad", "ac", "hello", "X man", "little",
    "During", "day" };
    String temp = "";
    for (int i = 0; i < sarr.length; i++) {
    for (int j = i + 1; j < sarr.length; j++) {
    if (compare(sarr[i], sarr[j]) > 0) {
    temp = sarr[i];
    sarr[i] = sarr[j];
    sarr[j] = temp;
    }
    }
    }
    System.out.println(Arrays.toString(sarr));
    } public static int compare(String str1, String str2) { char[] arr1 = str1.toCharArray();
    char[] arr2 = str2.toCharArray();
    int i = 0;
    int arr1_len1 = arr1.length;
    int arr2_len2 = arr2.length;
    int len = arr1_len1 < arr2_len2 ? arr1_len1 : arr2_len2;
    while (i < len) {
    char c1 = arr1[i], c2 = arr2[i];
    char c1_ = (char) (c1 >= 'a' ? c1 - ('a' - 'A') : c1);
    char c2_ = (char) (c2 >= 'a' ? c2 - ('a' - 'A') : c2);
    if (c1_ == c2_) {
    if (c1 != c2)
    return c1 - c2;
    } else
    return c1_ - c2_;
    i++;
    }
    if (arr1_len1 == arr2_len2)
    return 0;
    else if (arr1_len1 > arr2_len2)
    return arr1[len];
    else
    return -arr2[len]; }
    }
      

  2.   


        public static List<String> tSort(List<String> s){
            if(s.size()<=1) return s;
            List<String> pre = tSort(s.stream().filter(e -> lt(e,s.get(0))).collect(Collectors.toList()));
            List<String> lst = tSort(s.stream().filter(e -> lt(s.get(0),e)).collect(Collectors.toList()));
            pre.add(s.get(0));
            pre.addAll(lst);
            return pre;
        }
        public static boolean lt(String a,String b){
            String a2 = a.toUpperCase();
            String b2 = b.toUpperCase();
            for(int i=0;i<a.length() && i<b.length();i++){
                if(a2.charAt(i)!=b2.charAt(i)){
                    return a2.charAt(i)<b2.charAt(i);
                }
                if(a.charAt(i) != b.charAt(i)){
                    return b.charAt(i)>a.charAt(i);
                }
            }
            return false;
        }
      

  3.   

    这种问题,百度搜“java中实现字母按大小写排序”等等关键字就会出来的。
    要学会搜索问题。。