题解 | #字符串合并处理#

字符串合并处理

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();
    }


}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务