目录
一、题目描述
按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排序后的字符串进行操作,如果字符为‘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”
二、代码实现
1、使用查表法实现十六进制字符的逆转
使用Map存储映射关系
import java.util.Scanner;
import java.util.HashMap;
import java.util.Arrays;
public class Main {
public static HashMap<Character,Character> map = null;
public static void main(String[] args) {
map = new HashMap<Character,Character>(){
{
put('0', '0');
put('1', '8');
put('2', '4');
put('3', 'C');
put('4', '2');
put('5', 'A');
put('6', '6');
put('7', 'E');
put('8', '1');
put('9', '9');
put('a', '5');
put('b', 'D');
put('c', '3');
put('d', 'B');
put('e', '7');
put('f', 'F');
put('A', '5');
put('B', 'D');
put('C', '3');
put('D', 'B');
put('E', '7');
put('F', 'F');
}};
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str1 = sc.next();
String str2 = sc.next();
String str = str1 + str2;
String result = processString(str);
System.out.println(result);
}
}
public static String processString(String str) {
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
for (int i=0; i<str.length(); i++) {
if ((i & 1) == 0) {
sb1.append(str.charAt(i));
} else {
sb2.append(str.charAt(i));
}
}
String str1 = sort(sb1.toString());
String str2 = sort(sb2.toString());
StringBuilder sb3 = new StringBuilder();
int i = 0, j = 0;
while (j < str2.length()) {
char ch1 = str1.charAt(i);
char ch2 = str2.charAt(j);
if ((ch1>='0' && ch1<='9') || (ch1>='A' && ch1<='F') || (ch1>='a' && ch1<='f')) {
sb3.append(map.get(ch1));
} else {
sb3.append(ch1);
}
if ((ch2>='0' && ch2<='9') || (ch2>='A' && ch2<='F') || (ch2>='a' && ch2<='f')) {
sb3.append(map.get(ch2));
} else {
sb3.append(ch2);
}
//
//sb3.append(map.getOrDefault(ch1));
//sb3.append(map.getOrDefault(ch2));
//error: no suitable method found for getOrDefault(char)
//
//sb3.append(map.getOrDefault(Character.valueOf(ch1)));
//sb3.append(map.getOrDefault(Character.valueOf(ch2)));
//
//sb3.append(map.getOrDefault((Character)ch1));
//sb3.append(map.getOrDefault((Character)ch2));
//