java.lang.StringIndexOutOfBoundsException

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

这是一个将十六进制转换为字符串的代码,但在字符串大小不超过62个字符之前,它可以正常工作

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
in
String 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