题解 | #字符串合并处理#
字符串合并处理
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]+"); } }