【问题标题】:java.lang.StringIndexOutOfBoundsExceptionjava.lang.StringIndexOutOfBoundsException
【发布时间】:2012-09-01 07:32:39
【问题描述】:

这是一个将十六进制转换为字符串的代码,但在字符串的大小不超过 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());
        }

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 62 在 java.lang.String.substring(未知来源) 在 HEX.hexToString(HEX.java:36) 在 HEX.main(HEX.java:56)

【问题讨论】:

  • 必须在输入中,举个例子
  • String hex1 = "234c02ecbbfbafa3ed18510abd11fa724fcda2018a1a8342cf064bbde548d"
  • 这是 61 个字符,在你的 for 循环的最后一次迭代中,你要求字符 61+62.. 这就是问题所在。你到底想达到什么目的??

标签: java string indexoutofboundsexception


【解决方案1】:

String str = hex.substring(i, i+2); 中的i+2 是问题所在。即使i &lt; hex.length(),如果hex.length() 是奇数,i+2 也太大了。

【讨论】:

    【解决方案2】:

    如果您在 for 循环中使用 String.length 且 i 初始化为 0,那么您需要将字符串长度设为 -1

    for (int i = 0; i < hex.length()-1; i+=2) 
    

    【讨论】:

      【解决方案3】:

      修复你的循环条件:

      for (int i = 0; i < hex.length() - 3; i +=2) 
      

      【讨论】:

      • 这太简单了。 i
      【解决方案4】:

      只有当你的字符串中有奇数个字符时,你才会遇到这个问题。修复你的函数如下:

      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());
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-07
        • 2013-04-06
        • 2012-01-12
        • 2013-01-16
        • 2017-03-10
        • 2018-12-11
        • 2014-09-26
        • 2022-01-01
        相关资源
        最近更新 更多