题解 | #字符串合并处理#转换部分主要用了Integer的api,应该比较容易看懂

字符串合并处理

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


import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String str1 = sc.next();
            String str2 = sc.next();
            System.out.println(mergeAndSortChange(str1,str2));
        }


    }

    //对字符串进行 1前后合并 2排序 3指定字符转换
    public static String mergeAndSortChange(String str1, String str2) {
        //1.合并
        String str = str1 + str2;
        //2.排序
        ArrayList<Character> list1 = new ArrayList<>();//存放偶数位字符
        ArrayList<Character> list2 = new ArrayList<>();//存放奇数位字符
        for (int i = 0; i < str.length(); i++) {
            if (i % 2 == 0) {
                list1.add(str.charAt(i));
            } else {
                list2.add(str.charAt(i));
            }
        }
        Collections.sort(list1);
        Collections.sort(list2);
        //重新拼接
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < list1.size();i++) { //list1.size()>=list2.size()
                builder.append(list1.get(i));
                if(i<= list2.size()-1){ //防止越界
                    builder.append(list2.get(i));
                }
        }
        //3.对字符进行转换操作
        for (int i = 0; i < builder.length(); i++) {
            String s = builder.substring(i,i+1);
            if(s.matches("[0-9a-fA-F]")){
                //把16进制转成10进制,再转成二进制
                StringBuilder binary = new StringBuilder(Integer.toBinaryString(Integer.parseInt(s,16)));
                int len = binary.length();
                for (int j = 0; j <4-len ; j++) { //补零
                    binary.insert(0, "0");
                }
                binary = binary.reverse();//翻转
                int n = Integer.parseInt(binary.toString(), 2); //把二进制转成10进制
                String hexString = Integer.toHexString(n).toUpperCase();//转成16进制字符串大写
                builder.replace(i,i+1,hexString);//替换
            }
        }   
        return builder.toString();

    }

}

全部评论
下标从0开始算的,肯定先追加偶数位字符,而且肯定是偶数数组>=奇数数组,所以追加奇数位字符时要防止越界
3 回复 分享
发布于 2022-12-04 13:52 广东
你这个才对,前面一个直接查表,面试的时候时间肯定不够
点赞 回复 分享
发布于 2022-08-11 20:03
大牛啊
点赞 回复 分享
发布于 2022-09-15 21:42 安徽
排序那里,先追加奇数位的字符才对吧??并且注释里面应该是奇数的数组>=偶数的数组??
点赞 回复 分享
发布于 2022-11-16 02:02 广东

相关推荐

10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
评论
37
4
分享
牛客网
牛客企业服务