题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] split = str.split(" ");
String sortStr = strSort(split[0], split[1]);
System.out.println(strParse(sortStr));
}
//字符串合并并排序
public static String strSort(String str1, String str2) {
//合并字符串
String merge = str1 + str2;
StringBuilder odd = new StringBuilder();
StringBuilder even = new StringBuilder();
//将合并后的字符串拆分为奇数下标串和偶数下标串
for (int i = 0; i < merge.length(); i++) {
char c = merge.charAt(i);
//下标为偶数
if (i % 2 == 0) {
even.append(c);
//否则下标为奇数
} else {
odd.append(c);
}
}
//对拆分的字符串进行排序
char[] oddArr = odd.toString().toCharArray();
char[] evenArr = even.toString().toCharArray();
Arrays.sort(oddArr);
Arrays.sort(evenArr);
//合并字符串,奇数串放到奇数位置,偶数串放到偶数位置
StringBuilder result = new StringBuilder();
for (int i = 0, j = 0, k = 0; i < merge.length(); i++) {
//下标为偶数
if (i % 2 == 0) {
result.append(evenArr[j]);
j++;
//否则下标为奇数
} else {
result.append(oddArr[k]);
k++;
}
}
return result.toString();
}
//字符串转换
public static String strParse(String str) {
char[] charArray = str.toCharArray();
StringBuilder result = new StringBuilder();
for (char c : charArray) {
//如果字符是从a-f或者是A-F,转换为10进制以后在转换为二进制,然后倒序
if ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) {
Integer num = Integer.valueOf(Character.toString(c), 16);
String binaryString = Integer.toBinaryString(num);
if (binaryString.length() < 4) {
int zeroNum = 4 - binaryString.length();
for (int i = 0; i < zeroNum; i++) {
binaryString = '0' + binaryString;
}
}
StringBuilder sb = new StringBuilder(binaryString);
String reverseBinaryString = sb.reverse().toString();
String hexString = Integer.toHexString(Integer.valueOf(reverseBinaryString, 2));
result.append(hexString.toUpperCase());
//如果字符是数字,直接转换为数字在转换为二进制,然后倒序
} else if (c >= '0' && c <= '9') {
String binaryString = Integer.toBinaryString(Integer.parseInt(Character.toString(c)));
if (binaryString.length() < 4) {
int zeroNum = 4 - binaryString.length();
for (int i = 0; i < zeroNum; i++) {
binaryString = '0' + binaryString;
}
}
StringBuilder sb = new StringBuilder(binaryString);
String reverseBinaryString = sb.reverse().toString();
String hexString = Integer.toHexString(Integer.valueOf(reverseBinaryString, 2));
result.append(hexString.toUpperCase());
//以上都不是,直接拼入字符串即可
}else {
result.append(c);
}
}
return result.toString();
}
}
查看5道真题和解析