- 空间限制:32768K
- 算法知识视频讲解
题目描述
按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘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”
接口设计及说明:
/*
功能:字符串处理
输入:两个字符串,需要异常处理
输出:合并处理后的字符串,具体要求参考文档
返回:无
*/
void ProcessString(char* str1,char *str2,char * strOutput)
{
}
输入描述:
输入两个字符串
输出描述:
输出转化后的结果
输入例子:
dec fab
输出例子:
5D37BF
package com.huawei;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class 字符串合并处理 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str1 = sc.next();
String str2 = sc.next();
System.out.println(processString(str1, str2));
}
}
public static String processString(String str1, String str2) {
String str = str1 + str2;// 合并字符串
List<Character> list_odd = new ArrayList<>();
List<Character> list_even = new ArrayList<>();
//按照奇数位偶数位分割
for (int i = 0; i < str.length(); i++) {
if (i % 2 == 0) {
list_even.add(str.charAt(i));
} else {
list_odd.add(str.charAt(i));
}
}
//对分割后的分别排序
Collections.sort(list_odd);
Collections.sort(list_even);
//重新合并
char[] array1 = new char[str.length()];
int j = 0, k = 0;
for (int i = 0; i < array1.length; i++) {
if (i % 2 == 0) {
array1[i] = list_even.get(j++);
} else {
array1[i] = list_odd.get(k++);
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < array1.length; i++) {
//对每一位进行转换,此处使用数表转换
sb.append(change1(array1[i]));
}
return sb.toString();
}
private static char change1(char a) {
char res;
switch (a) {
case '0':
res = '0';
break;
case '1':
res = '8';
break;
case '2':
res = '4';
break;
case '3':
res = 'C';
break;
case '4':
res = '2';
break;
case '5':
res = 'A';
break;
case '6':
res = '6';
break;
case '7':
res = 'E';
break;
case '8':
res = '1';
break;
case '9':
res = '9';
break;
case 'A':
res = '5';
break;
case 'B':
res = 'D';
break;
case 'C':
res = '3';
break;
case 'D':
res = 'B';
break;
case 'E':
res = '7';
break;
case 'F':
res = 'F';
break;
case 'a':
res = '5';
break;
case 'b':
res = 'D';
break;
case 'c':
res = '3';
break;
case 'd':
res = 'B';
break;
case 'e':
res = '7';
break;
case 'f':
res = 'F';
break;
default:
res = a;
}
return res;
}
private static char change(char c) {
char t = c;
if (c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a'
&& c <= 'f') {
t = reverseOrder(c);
}
return t;
}
/**
* 待完善 自己实现如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,
* 并转换为相应的大写字符。
*
* @param c
* @return
*/
private static char reverseOrder(char c) {
String str = Integer.toHexString((int) c);
char[] chars = str.toCharArray();
Collections.reverse(Arrays.asList(chars));
return 0;
}
}