Java HEX 到 ASCII 的转换、for 循环和所需的其他信息

标签 java for-loop hex

我试图让我的程序输出类似这样的内容,这是十六进制到 ASCII 或字符的转换。只是需要帮助。当我的 for 循环出错时请告诉我。

Please enter the string to convert:  
a+b%3A4865792074686973206973206a7573742061207072616374696365
a b:Hey this is just a practice

但我在下面得到了这个:(

Please enter the string to convert: 
a+b%3A4865792074686973206973206a7573742061207072616374696365
a b%3A4865792074686973206973206a7573742061207072616374696365:::::::::::::::::::::::::::::

这是我的代码

public class Unmangle {

    public static void main(String[] args) {

        Scanner webinput = new Scanner(System.in);

        System.out.println("Please enter the string to convert: ");
        String input = webinput.nextLine();
        Unmangle.Unmangler(input);
        String result = Unmangle.Unmangler(input);
        System.out.println(result);

    }

    // For example, unmangle("a+b%3A") should return "a b:".

    public static String Unmangler(String input) {

        // if(input.contains("%"))
        int place = input.indexOf("%");
        StringBuilder outputbuild = new StringBuilder();
        StringBuilder S;

        for (int i = place; i < input.length(); i += 2) {
            String output = input.substring(place + 1, place + 3);
            outputbuild.append((char) Integer.parseInt(output, 16));
        }

        String result = input.replace("+", " ") + outputbuild;

        return result;
    }

}

最佳答案

  1. 在您的 for 中循环你需要从 % 之后的下一个字母开始所以应该是

    for (int i = place + 1; i < input.length(); i += 2) {
    //           ^^^^^^^^^ 
    
  2. 在迭代中您应该使用 i确定子字符串的索引,而不是 place .
    顺便说一句,自 iplace + 1开始索引不会是 i+1, i+3但是i, i+2

    String output = input.substring(i , i + 2);
    
  3. 最后的更改将仅获取 % 之前的部分(包括它)在替换 + 之前带空格并包含解码后的字符串

    String result = input.substring(0, place + 1).replace("+", " ") + outputbuild;
    

所以尝试改变你的Unmangler方法

public static String unmangler(String input) {

    StringBuilder outputbuild = new StringBuilder();

    int place = input.indexOf("%");
    for (int i = place + 1; i < input.length(); i += 2) 
        outputbuild.append((char) Integer.parseInt(input.substring(i , i + 2), 16));

    return input.substring(0, place + 1).replace("+", " ") + outputbuild;
}

关于Java HEX 到 ASCII 的转换、for 循环和所需的其他信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18434056/

相关文章:

python - 如何在不使用 for 循环的情况下将列表中的所有项目与整数进行比较

C 将十六进制值 "\xHH"转换为整数

java - 为什么 Matcher.find() 在 Matcher.lookingAt() 之后运行时返回 false?

java - 在 Java 泛型中创建类型对象

java - Thread.currentThread() 是如何工作的?

java - 查找 1 个字符串中的每个字符是否存在于另一个字符串中,比 O(n^2) 更快

javascript - 根据条件在每个循环中多次增加循环变量

python - 是否可以在python中为命令应用for循环

c - 从C中的十六进制地址中提取MSB和LSB

c++ - C++ 中的整数到十六进制字符串