您的位置:首页 > 编程语言 > Java开发

华为上机 字符串合并处理 java

2016-09-06 21:04 381 查看
空间限制: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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  华为上机