题目描述:
按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排序后的字符串进行操作,如果字符为‘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;
}
}