Java十六进制解码方法仅能解码单个字符 无法处理完整字符串问题求助
存在的问题
- 子串截取逻辑错误:当前每次仅截取1位字符,而
hexDeValue需要2位十六进制串才能匹配;同时调用hexDeValue时错误传入了完整输入串,而非截取的2位片段,导致长输入全部匹配默认分支返回空格,无有效输出 - 字符串比较错误:使用
==判断字符串内容,该判断仅比较对象内存地址,hext == "27"永远不生效,单引号无法解析 - 遍历步长错误:处理2位的十六进制片段时,每次仅移动1位下标,逻辑混乱
hexDeValue方法缺失27对应的单引号分支,就算参数正确也无法解析单引号- 冗余的
while(true)循环和越界判断,导致运行逻辑异常
修正后代码
import java.util.Scanner; public class HexDecode { public static void main(String[] args) throws InterruptedException { // 替换TextIO为通用Scanner,你也可以保留原有TextIO逻辑 Scanner scanner = new Scanner(System.in); while(true) { System.out.println("Enter a hexadecimal value"); String input = scanner.nextLine(); System.out.println(hexDe(input)); } } public static String hexDe(String textout) { StringBuilder output = new StringBuilder(); // 步长设为2,每次处理2位十六进制 for(int i = 0; i < textout.length(); i += 2) { char current = textout.charAt(i); // 空格直接追加,跳过转换 if(current == ' ') { output.append(' '); // 空格仅占1位,下标回退1,保证下次步长2正常对齐 i--; continue; } // 剩余不足2位直接结束,避免越界 if(i + 1 >= textout.length()) { break; } // 截取2位十六进制片段 String hext = textout.substring(i, i + 2); output.append(hexDeValue(hext)); } return output.toString(); } public static char hexDeValue(String parameter) { switch(parameter) { // 补充缺失的单引号分支 case "27": return '\''; case "21": return '!'; case "22": return '"'; case "23": return '#'; case "24": return '$'; case "25": return '%'; case "26": return '&'; case "28": return '('; case "29": return ')'; case "2A": return '*'; case "2B": return '+'; case "2C": return ','; case "2D": return '-'; case "2E": return '.'; case "2F": return '/'; case "30": return '0'; case "31": return '1'; case "32": return '2'; case "33": return '3'; case "34": return '4'; case "35": return '5'; case "36": return '6'; case "37": return '7'; case "38": return '8'; case "39": return '9'; case "3A": return ':'; case "3B": return ';'; case "3C": return '<'; case "3D": return '='; case "3E": return '>'; case "3F": return '?'; case "40": return '@'; case "41": return 'A'; case "42": return 'B'; case "43": return 'C'; case "44": return 'D'; case "45": return 'E'; case "46": return 'F'; case "47": return 'G'; case "48": return 'H'; case "49": return 'I'; case "4A": return 'J'; case "4B": return 'K'; case "4C": return 'L'; case "4D": return 'M'; case "4E": return 'N'; case "4F": return 'O'; case "50": return 'P'; case "51": return 'Q'; case "52": return 'R'; case "53": return 'S'; case "54": return 'T'; case "55": return 'U'; case "56": return 'V'; case "57": return 'W'; case "58": return 'X'; case "59": return 'Y'; case "5A": return 'Z'; case "5B": return '['; case "5D": return ']'; case "5E": return '^'; case "5F": return '_'; case "60": return '`'; case "61": return 'a'; case "62": return 'b'; case "63": return 'c'; case "64": return 'd'; case "65": return 'e'; case "66": return 'f'; case "67": return 'g'; case "68": return 'h'; case "69": return 'i'; case "6A": return 'j'; case "6B": return 'k'; case "6C": return 'l'; case "6D": return 'm'; case "6E": return 'n'; case "6F": return 'o'; case "70": return 'p'; case "71": return 'q'; case "72": return 'r'; case "73": return 's'; case "74": return 't'; case "75": return 'u'; case "76": return 'v'; case "77": return 'w'; case "78": return 'x'; case "79": return 'y'; case "7A": return 'z'; case "7B": return '{'; case "7C": return '|'; case "7D": return '}'; case "7E": return '~'; default: return ' '; } } }
内容的提问来源于stack exchange,提问作者MarkoPlazmer8
相关产品推荐
相关产品推荐

