我试图让我的程序输出类似这样的内容,这是十六进制到 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;
}
}
最佳答案
在您的
for
中循环你需要从%
之后的下一个字母开始所以应该是for (int i = place + 1; i < input.length(); i += 2) { // ^^^^^^^^^
在迭代中您应该使用
i
确定子字符串的索引,而不是place
.
顺便说一句,自i
从place + 1
开始索引不会是i+1, i+3
但是i, i+2
String output = input.substring(i , i + 2);
最后的更改将仅获取
%
之前的部分(包括它)在替换+
之前带空格并包含解码后的字符串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/