用了一种看起来很愚蠢的解法:

package huawei;

import java.util.*;

public class Main {
    static Map<String, String> map = new HashMap<>();
    static {

        map.put("0", "0");
        map.put("1", "8");
        map.put("2", "4");
        map.put("3", "C");
        map.put("4", "2");
        map.put("5", "A");
        map.put("6", "6");
        map.put("7", "E");
        map.put("8", "1");
        map.put("9", "9");
        map.put("A", "5");
        map.put("B", "D");
        map.put("C", "3");
        map.put("D", "B");
        map.put("E", "7");
        map.put("F", "F");
    }

    private static String modify(String s) {
        if (map.containsKey(s.toUpperCase())) {
            return map.get(s.toUpperCase());
        }
        return s;
    }


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String a1 = in.next();
            String a2 = in.next();
            String a = a1 + a2;
            List<String> temp1 = new ArrayList<>(); // jishu
            List<String> temp2 = new ArrayList<>(); // oushu
            char[] chars = a.toCharArray();
            for (int i = 0; i < chars.length; i++) {
                if (i % 2 != 0) {
                    temp1.add(String.valueOf(chars[i]));
                } else {
                    temp2.add(String.valueOf(chars[i]));
                }
            }
            temp1.sort(String::compareTo);
            temp2.sort(String::compareTo);
            String[] strings = new String[a.length()];
            int j = 0;
            for (String s : temp2) {
                strings[j] = s;
                j += 2;
            }
            int k = 1;
            for (String s : temp1) {
                strings[k] = s;
                k += 2;
            }
            StringBuilder stringBuilder = new StringBuilder();
            for (String string : strings) {
                stringBuilder.append(modify(string));
            }
            System.out.println(stringBuilder);
        }
    }
}