java.lang.StringIndexOutOfBoundsException
这是一个将十六进制转换为字符串的代码,但在字符串大小不超过62个字符之前,它可以正常工作java.lang.StringIndexOutOfBoundsException,java,string,indexoutofboundsexception,Java,String,Indexoutofboundsexception,这是一个将十六进制转换为字符串的代码,但在字符串大小不超过62个字符之前,它可以正常工作 public static String hexToString(String hex) { StringBuilder output = new StringBuilder(); for (int i = 0; i < hex.length(); i+=2) { String st
public static String hexToString(String hex)
{
StringBuilder output = new StringBuilder();
for (int i = 0; i < hex.length(); i+=2)
{
String str = hex.substring(i, i+2);
output.append((char)Integer.parseInt(str, 16));
}
return(output.toString());
}
公共静态字符串hexToString(字符串hex)
{
StringBuilder输出=新的StringBuilder();
对于(int i=0;i
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:
62
位于java.lang.String.substring(未知源)
在HEX.hexToString(HEX.java:36)
在HEX.main(HEX.java:56)
i+2
inString str=hex.substring(i,i+2)代码>是问题所在。即使i
,i+2
太大,如果hex.length()
是奇数。如果在for循环中使用String.length,且i在0处启动,则需要从字符串长度中减去-1
for (int i = 0; i < hex.length()-1; i+=2)
for(int i=0;i
修复循环条件:
for (int i = 0; i < hex.length() - 3; i +=2)
for(int i=0;i
只有当字符串中的字符数为奇数时,您才会遇到此问题。按如下方式修复您的函数:
public static String hexToString(String hex)
{
StringBuilder output = new StringBuilder();
String str = "";
for (int i = 0; i < hex.length(); i+=2)
{
if(i+2 < hex.length()){
str = hex.substring(i, i+2);
}else{
str = hex.substring(i, i+1);
}
output.append((char)Integer.parseInt(str, 16));
}
return(output.toString());
}
公共静态字符串hexToString(字符串hex)
{
StringBuilder输出=新的StringBuilder();
字符串str=“”;
对于(int i=0;i
它必须在输入中,给我们一个例子String hex1=“234C02EBBFBAFA3ED18510ABD11FA724FCDA2018A1A8342CF064BBDE548D”它是61个字符,在for循环的最后一次迭代中,您要求输入61+62个字符。。这就是问题所在。你到底想实现什么?那太简单了。i