此题不难,知道进制转换的函数使用即可

字符串合并处理

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



import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            // 第一步
            String string = sc.next() + sc.next();
            ArrayList<Character> j = new ArrayList<>();
            ArrayList<Character> ou = new ArrayList<>();
            char[] charArray = string.toCharArray();
            for (int i = 0; i < charArray.length; i++) {
                if (i % 2 == 0) {
                    // 添加到偶数集合
                    ou.add(charArray[i]);
                    continue;
                }
                // 奇数
                j.add(charArray[i]);
            }
            // 注意:默认按ascii码进行排序,如C在a前面,D在b前面
            Collections.sort(j);
            Collections.sort(ou);
            // 替换奇偶位置的字符
            for (int i = 0, n = 0, m = 0; i < charArray.length; i++) {
                if (i % 2 == 0) {
                    charArray[i] = ou.get(n);
                    n++;
                    continue;
                }

                charArray[i] = j.get(m);
                m++;
            }
            // 第三步:对排序后的字符串中的'0'~'9'、'A'~'F'和'a'~'f'字符,需要进行转换操作
            for (int i = 0; i < charArray.length; i++) {
                char c = charArray[i];
                if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' &&
                        c <= 'F')) {
                    // 从十六进制到十进制
                    int x = Character.digit(c, 16);
                    // 从十进制到二进制
                    String binaryString = Integer.toBinaryString(x);
                    // 由于十六进制的0~9以及字母都是4位数的二进制,所以转成十六进制后不足4位前面需补0
                    while (binaryString.length() < 4) {
                        binaryString = "0" + binaryString;
                    }
                    // 反转后的二进制
                    StringBuilder reverse = new StringBuilder(binaryString).reverse();
                    // 从二进制到十进制
                    int newX = Integer.parseInt(reverse.toString(), 2);
                    // 从十进制到十六进制
                    char forDigit = Character.forDigit(newX, 16);
                    // 按题目要求转成大写的
                    charArray[i] = Character.toUpperCase(forDigit);
                }

            }

            System.out.println(new String(charArray));
        }
    }
}

全部评论

相关推荐

大愣子衰哥:老哥,是正式还是实习
点赞 评论 收藏
分享
04-01 16:02
已编辑
武汉工程大学 Java
牛客98843461...:处女面??我还种马面渣男面处男面呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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