字符串合并处理

题目描述:

按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排序后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’; 如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。


举例:输入str1为"dec",str2为"fab",合并为“decfab”,分别对“dca”和“efb”进行排序,排序后为“abcedf”,转换后为“5D37BF”


import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;

public class Main
{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext())
        {
            String str1 = scanner.next();
            String str2 = scanner.next();
            String str = str1 + str2;
            LinkedList<Character> even = new LinkedList<>();
            LinkedList<Character> odd = new LinkedList<>();
            for (int i = 0; i < str.length(); i++)
            {
                if (i % 2 == 0)
                {
                    even.add(str.charAt(i));
                }
                else
                {
                    odd.add(str.charAt(i));
                }
            }
            Collections.sort(even);
            Collections.sort(odd);

            int x = 0;
            int y = 0;
            while (x < even.size() || y < odd.size())
            {
                if (x < even.size() )
                {
                    reverse(even.get(x));
                    x++;
                }
                if (y < odd.size())
                {
                    reverse(odd.get(y));
                    y++;
                }
            }
            System.out.println();
        }
    }

    public static void reverse(char ch)
    {
        if ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F'))
        {
            int num = Integer.valueOf(ch + "", 16);
            String numStr = toBinaryString(num);
            StringBuffer sb = new StringBuffer(numStr);
            sb.reverse();
            int newNum = Integer.valueOf(String.valueOf(sb), 2);
            String newStr = Integer.toHexString(newNum);
            char out = newStr.charAt(0);
            if (out >= 'a' && out <= 'f')
                System.out.print(Character.toUpperCase(out));
            else
                System.out.print(out);
        }
        else
        {
            System.out.print(ch);
        }
    }

    public static String toBinaryString(int n)
    {
        String nStr = "0000" + Integer.toBinaryString(n);
        nStr = nStr.substring(nStr.length() - 4);
        return nStr;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值