字符串合并处理

字符串合并处理

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);
        }
    }
}
全部评论

相关推荐

09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
7
7
分享

创作者周榜

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