字符串合并处理

字符串合并处理

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

java的进制转换在Integer中都有提供相应的方法,当然自己写也不难。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            char[] str1 = in.next().toCharArray();
            char[] str2 = in.next().toCharArray();
            //合并
            StringBuilder res = new StringBuilder();
            res.append(str1);
            res.append(str2);
            //奇偶分类
            StringBuilder even = new StringBuilder();
            StringBuilder odd = new StringBuilder();
            for(int i = 0; i < res.length(); i++){
                if(i%2 == 0) even.append(res.charAt(i));
                else odd.append(res.charAt(i));
            }
            char[] evenC = even.toString().toCharArray();
            char[] oddC = odd.toString().toCharArray();
            Arrays.sort(evenC);
            Arrays.sort(oddC);
            //再次合并,并非直接拼接,而是按原先的奇偶插回
            int oddIndex = 0;
            int evenIndex = 0;
            StringBuilder sorted = new StringBuilder();
            for(int j = 0; j < res.length(); j++){
                if(j%2 == 0){
                    sorted.append(evenC[evenIndex]);
                    evenIndex++;
                }
                else{
                    sorted.append(oddC[oddIndex]);
                    oddIndex++;
                }
            }

            //转换
            String dict = "0123456789abcdefABCDEF";//只是为了写起来方便
            char[] sortedChar = sorted.toString().toCharArray();
            for(int m = 0; m < sortedChar.length; m++){
                //如果是0-9,a-f,A-F
                if(dict.contains(String.valueOf(sortedChar[m]))){
                    //转换为十进制
                    int decimal = Integer.parseInt(String.valueOf(sortedChar[m]),16);
                    //转换为二进制,加leading zeros
                    String binary = Integer.toString(decimal,2);
                    binary = String.format("%04d", Integer.valueOf(binary));
                    //翻转
                    String reverseBinary = new StringBuilder(binary).reverse().toString();
                    //转换回16进制,如果是小写字符,变大写
                    //实际上这里无需判断是否是别的字符,因为四位二进制最大也就是1111,对应f,所以直接转换成大写
                    decimal = Integer.parseInt(reverseBinary,2);
                    String hex = Integer.toString(decimal,16).toUpperCase();
                    sortedChar[m] = hex.charAt(0);
                }
            }
            System.out.println(sortedChar);
        }
    }
}
全部评论

相关推荐

头像
02-15 16:23
中南大学 Java
野猪不是猪🐗:签了美团真是不一样! 亲戚们都知道我签了美团,过年都围着我问送一单多少钱,还让弟弟妹妹们引以为戒,笑我爸我妈养了个🐢孩子,说从小就知道我这个人以后肯定没出息,我被骂的都快上天了
点赞 评论 收藏
分享
评论
7
7
分享

创作者周榜

更多
牛客网
牛客企业服务