You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:06:02