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

字符串合并处理

https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String[] split = str.split(" ");
        String sortStr = strSort(split[0], split[1]);
        System.out.println(strParse(sortStr));
    }

    //字符串合并并排序
    public static String strSort(String str1, String str2) {
        //合并字符串
        String merge = str1 + str2;
        StringBuilder odd = new StringBuilder();
        StringBuilder even = new StringBuilder();
        //将合并后的字符串拆分为奇数下标串和偶数下标串
        for (int i = 0; i < merge.length(); i++) {
            char c = merge.charAt(i);
            //下标为偶数
            if (i % 2 == 0) {
                even.append(c);
                //否则下标为奇数
            } else {
                odd.append(c);
            }
        }
        //对拆分的字符串进行排序
        char[] oddArr = odd.toString().toCharArray();
        char[] evenArr = even.toString().toCharArray();
        Arrays.sort(oddArr);
        Arrays.sort(evenArr);
        //合并字符串,奇数串放到奇数位置,偶数串放到偶数位置
        StringBuilder result = new StringBuilder();
        for (int i = 0, j = 0, k = 0; i < merge.length(); i++) {
            //下标为偶数
            if (i % 2 == 0) {
                result.append(evenArr[j]);
                j++;
                //否则下标为奇数
            } else {
                result.append(oddArr[k]);
                k++;
            }
        }
        return result.toString();
    }


    //字符串转换
    public static String strParse(String str) {
        char[] charArray = str.toCharArray();
        StringBuilder result = new StringBuilder();
        for (char c : charArray) {
            //如果字符是从a-f或者是A-F,转换为10进制以后在转换为二进制,然后倒序
            if ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) {
                Integer num = Integer.valueOf(Character.toString(c), 16);
                String binaryString = Integer.toBinaryString(num);
                if (binaryString.length() < 4) {
                    int zeroNum = 4 - binaryString.length();
                    for (int i = 0; i < zeroNum; i++) {
                        binaryString = '0' + binaryString;
                    }
                }
                StringBuilder sb = new StringBuilder(binaryString);
                String reverseBinaryString = sb.reverse().toString();
                String hexString = Integer.toHexString(Integer.valueOf(reverseBinaryString, 2));
                result.append(hexString.toUpperCase());
                //如果字符是数字,直接转换为数字在转换为二进制,然后倒序
            } else if (c >= '0' && c <= '9') {
                String binaryString = Integer.toBinaryString(Integer.parseInt(Character.toString(c)));
                if (binaryString.length() < 4) {
                    int zeroNum = 4 - binaryString.length();
                    for (int i = 0; i < zeroNum; i++) {
                        binaryString = '0' + binaryString;
                    }
                }
                StringBuilder sb = new StringBuilder(binaryString);
                String reverseBinaryString = sb.reverse().toString();
                String hexString = Integer.toHexString(Integer.valueOf(reverseBinaryString, 2));
                result.append(hexString.toUpperCase());
                //以上都不是,直接拼入字符串即可
            }else {
                result.append(c);
            }
        }
        return result.toString();
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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