2012-09-07 27 views
2

这是一个将十六进制转换为字符串的代码,但它工作正常,直到字符串的大小不超过62个字符?java.lang.StringIndexOutOfBoundsException

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:字符串索引超出范围:在java.lang.String.substring(未知来源) 在HEX.hexToString(HEX.java:36) 在HEX.main(HEX.java:56)

+0

它必须输入,给我们举例 –

+0

字符串hex1 =“234c02ecbbfbafa3ed18510abd11fa724fcda2018a1a8342cf064bbde548d” –

+0

这是61个字符,并在你的周期,你问字符61 + 62最后一次迭代..那就是问题所在。你究竟在努力实现什么? –

回答

2

你会只有在字符串中有奇数个字符时才会面临此问题。修复您的功能如下:

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

i+2 in String str = hex.substring(i, i+2);是问题所在。即使i < hex.length(),i+2太大,如果hex.length()是奇数。

0

如果youre在使用string.length减for循环,用我在0开始,那么你需要从字符串长度

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

这根本就不对。 – sebastian

0

为-1解决您的循环条件:

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

这太简单了。我 gefei

相关问题