2012-09-07 28 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

相關問題