题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
import java.util.Scanner; import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static final List<String> HEXLIST = Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"); public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); String[] split = str.split(" "); String mergeStr = mergeStr(split[0], split[1]); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0, len = mergeStr.length(); i < len; i++) { String s = mergeStr.charAt(i) + ""; if (HEXLIST.contains(s)) { int hex = toHex(s); String revert = revert(hex); stringBuilder.append(revert); } else { stringBuilder.append(s); } } System.out.println(stringBuilder); } private static String mergeStr(String str1, String str2) { String mergeStr = str1 + str2; // 奇数列表 LinkedList<String> oddList = new LinkedList<>(); // 偶数列表 LinkedList<String> evenList = new LinkedList<>(); for (int i = 0, len = mergeStr.length(); i < len; i++) { if (i % 2 == 0) { oddList.add(mergeStr.charAt(i) + ""); } else { evenList.add(mergeStr.charAt(i) + ""); } } // 排序 Collections.sort(oddList); Collections.sort(evenList); int length = Math.max(oddList.size(), evenList.size()); // 挨个从列表中把数据取出来并合并到新的字符串里面去 StringBuilder stringBuffer = new StringBuilder(); for (int i = 0; i < length - 1; i++) { stringBuffer.append(oddList.get(i)); stringBuffer.append(evenList.get(i)); } stringBuffer.append(oddList.get(length - 1)); if (oddList.size() == evenList.size()) { stringBuffer.append(evenList.get(length - 1)); } return stringBuffer.toString(); } private static int toHex(String str) { switch (str) { case "A": case "a": return 10; case "B": case "b": return 11; case "C": case "c": return 12; case "D": case "d": return 13; case "E": case "e": return 14; case "F": case "f": return 15; } return Integer.parseInt(str); } private static String revert(int hex) { // 转成二进制字符串 String binaryStr = Integer.toBinaryString(hex); // 前面补齐0 StringBuilder complete0 = new StringBuilder(); for (int i = 0; i < 4 - binaryStr.length(); i++) { complete0.append("0"); } binaryStr = complete0 + binaryStr; // 二进制字符串翻转 String reverseStr = (new StringBuilder(binaryStr)).reverse().toString(); // 再转成数值 int intVal = Integer.parseInt(reverseStr, 2); // 再转成16进制字符串 return Integer.toHexString(intVal).toUpperCase(); } }