题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner fzhinput = new Scanner(System.in);
String srzfc[] = new String[2];
StringBuilder stack = new StringBuilder();
// 输入两个字符串并拼接
for (int i = 0; i < 2; i++) {
srzfc[i] = fzhinput.next();
stack.append(srzfc[i]);
}
String zfc = stack.toString();
// 将偶数位和奇数位的字符分别存储
ArrayList<Character> os = new ArrayList<>();
ArrayList<Character> js = new ArrayList<>();
for (int i = 0; i < zfc.length(); i++) {
if (i % 2 == 0) {
os.add(zfc.charAt(i));
} else {
js.add(zfc.charAt(i));
}
}
// 对偶数位和奇数位字符分别排序
Collections.sort(os);
Collections.sort(js);
// 根据原顺序重新组合排序后的字符
int x = 0, y = 0;
stack.setLength(0); // 清空stack用于重新构造
for (int i = 0; i < zfc.length(); i++) {
if (i % 2 == 0) {
stack.append(os.get(x++));
} else {
stack.append(js.get(y++));
}
}
// 处理排序后的字符串
String jz16 = stack.toString();
StringBuilder fzstack = new StringBuilder();
for (int i = 0; i < jz16.length(); i++) {
char ch = jz16.charAt(i);
// 检查是否为有效的十六进制字符
if (isHexadecimal(ch)) {
// 将十六进制字符转换为数值
int a = Integer.parseInt(Character.toString(ch), 16);
// 将数值转换为4位二进制字符串
String erjz = Integer.toBinaryString(a);
while (erjz.length() < 4) { // 确保每个二进制字符串是4位长
erjz = "0" + erjz;
}
// 翻转二进制字符串
String reversedErjz = new StringBuilder(erjz).reverse().toString();
fzstack.append(reversedErjz).append("|");
} else {
// 保留非十六进制字符原样
fzstack.append(ch).append("|");
}
}
// 将处理过的二进制字符串按'|'分割
String[] dclerjz = fzstack.toString().split("\\|");
for (int i = 0; i < dclerjz.length; i++) {
if (!dclerjz[i].isEmpty() && isBinary(dclerjz[i])) { // 跳过空字符串或非二进制字符
// 将翻转后的二进制字符串转换回十进制数
int a = Integer.parseInt(dclerjz[i], 2);
// 将十进制数转换为大写十六进制字符
String sixteenjz = Integer.toString(a, 16).toUpperCase();
// 输出最终结果
System.out.print(sixteenjz);
} else {
// 对于非十六进制字符直接输出原字符
System.out.print(dclerjz[i]);
}
}
}
// 判断字符是否为十六进制字符
public static boolean isHexadecimal(char ch) {
return (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F');
}
// 判断字符串是否为合法的二进制数
public static boolean isBinary(String s) {
return s.matches("[01]+");
}
}
SHEIN希音公司福利 370人发布