一个思路清晰的分步骤解题思路

这道题难也难不到哪去,就是比较复杂,代码多了遇到点小错误容易改崩溃,比如StringBuilder设的是全局的,但是局部用过一次没有及时清空导致答案非常离谱。。。



import java.util.*;
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String s1 = scanner.next();
        String s2 = scanner.next();
        s1 = convert(asort(combine(s1,s2)));
        System.out.println(s1);
    }
    public static String combine(String str1, String str2){
        String str3 = str1 + str2;
        return str3;
    }

    public static String asort(String str){
        int len = str.length();
        StringBuilder odd = new StringBuilder();
        StringBuilder even = new StringBuilder();
        for(int i = 0; i < len; i++ ){
            if(i % 2 == 0)
                odd.append(str.charAt(i));
            else
                even.append(str.charAt(i));
        }
        String oddStr = odd.toString();
        String evenStr = even.toString();
        char[] oddChar = oddStr.toCharArray();
        char[] evenChar = evenStr.toCharArray();
        Arrays.sort(oddChar);
        Arrays.sort(evenChar);
        StringBuilder sb1 = new StringBuilder();
        for(int i = 0; i < len; i++){
            if(i % 2 == 0)
                sb1.append(oddChar[i / 2]);
            else
                sb1.append(evenChar[(i + 1) / 2 - 1]);
        }
        oddStr = sb1.toString();
        return oddStr;
    }

    public static String convert(String str){
        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = new StringBuilder();
        String s;
        for(int i = 0; i < str.length(); i++){
            int j = 0;
            if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){
                s = new StringBuilder(Integer.toBinaryString(Integer.parseInt(str.charAt(i) + ""))).toString();
                while(j++ < (4 - s.length()))
                    sb.append('0');
                sb.append(s);
                s = sb.reverse().toString();
                sb.delete(0,sb.length());
                int num = Integer.parseInt(s,2);
                sb1.append(Integer.toHexString(num).toUpperCase());
            }
            else if(str.charAt(i) >= 'a' && str.charAt(i) <= 'f'){
                s = str.charAt(i) - 'a' + 10 + "";
                s = new StringBuilder(Integer.toBinaryString(Integer.parseInt(s))).toString();
                sb.append(s);
                s = sb.reverse().toString();
                sb.delete(0,sb.length());
                int num = Integer.parseInt(s,2);
                sb1.append(Integer.toHexString(num).toUpperCase());
            }
            else if(str.charAt(i) >= 'A' && str.charAt(i) <= 'F'){
                s = str.charAt(i) - 'A' + 10 + "";
                s = new StringBuilder(Integer.toBinaryString(Integer.parseInt(s))).toString();
                sb.append(s);
                s = sb.reverse().toString();
                sb.delete(0,sb.length());
                int num1 = Integer.parseInt(s,2);
                sb1.append(Integer.toHexString(num1).toUpperCase());
            }
            else{
                sb1.append(str.charAt(i));
            }
        }
        return sb1.toString();
    }
}