题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
import java.util.Scanner; import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()) { String input = scanner.nextLine().replace(" ", ""); char[] chars = input.toCharArray(); // 转换0-9,A-F,a-f Map<String, String> map = new HashMap<>(); for (int i = 0; i < 10; i++) { map.put(i + "", getIntResult(i)); } String[] strings = {"A", "B", "C", "D", "E", "F"}; List<String> stringList = Arrays.asList(strings); for (String str : stringList) { int i = charToInt(str); map.put(str, getIntResult(i)); map.put(str.toLowerCase(Locale.ROOT), getIntResult(i)); } // 第一步 List ji = new ArrayList(chars.length); List ou = new ArrayList(chars.length); for (int i = 0; i < chars.length; i++) { if (i % 2 == 0) { ou.add(chars[i]); } else { ji.add(chars[i]); } } ou.sort(Comparator.comparingInt((Character o) -> o)); ji.sort(Comparator.comparingInt((Character o) -> o)); // 第二步 List<Character> data = new ArrayList(chars.length); for (int i = 0; i < chars.length; i++) { if (i % 2 == 0) { data.add((Character) ou.get(i / 2)); } else { data.add((Character) ji.get(i / 2 + i % 2 - 1)); } } StringBuilder stringBuilder = new StringBuilder(); for (Character temp : data) { if (temp >= 'A' && temp <= 'F' || temp >= 'a' && temp <= 'f' || temp >= '0' && temp <= '9') { stringBuilder.append(map.get(temp + "")); continue; } stringBuilder.append(temp + ""); } System.out.println(stringBuilder); } } private static String getIntResult(int i) { if (i == 0) { return "0"; } StringBuilder builder = new StringBuilder("0000"); String binaryString = Integer.toBinaryString(i); if (binaryString.length() < 4) { binaryString = builder.substring(0, 4 - binaryString.length()) + binaryString; } StringBuilder binaStr = new StringBuilder(binaryString); String revertStr = binaStr.reverse().toString(); int j = Integer.parseInt(revertStr, 2); if (j >= 10 && j <= 15) { return intToChar(j); } else { return j + ""; } } private static int charToInt(String str) { String[] strings = {"A", "B", "C", "D", "E", "F"}; for (int i = 10; i < strings.length + 10; i++) { if (str.equals(strings[i - 10])) { return i; } } return 0; } private static String intToChar(int ints) { Character[] temp = new Character[] {'A', 'B', 'C', 'D', 'E', 'F'}; for (int i = 10; i < 16; i++) { if (ints == i) { return temp[ints - 10] + ""; } } return ""; } }