2016-02-18 79 views
0
public class IPconversion { 

public void integertoip(int a){ 


    String b = Integer.toBinaryString(a); 

    int l = 32 - b.length(); 
    StringBuilder builder = new StringBuilder(); 
    String [] arr = new String[l]; 

    for(int k =0; k<arr.length; k++){ 

     arr[k] = "0"; 


    } 

    for(int i = 0;i<arr.length;i++){ 
     builder.append(arr[i]); 
} 
     String m = builder.toString(); 


     b = m+b; //adds missing zeros to represent all 32 bits 




    StringBuilder input1 = new StringBuilder(); 
    input1.append(b); 
    input1=input1.reverse(); //reverses the 32 bit binary string 
    System.out.println(input1); 
    String c = input1.toString(); 
    int len = 8; 
    String regex = "(?<=^|\\G.{" + len + "})"; 

    String [] parts = c.split (regex); //stores 8 bits chunks in array 


    for(int i =0; i<parts.length; i++){ 
    StringBuilder input2 = new StringBuilder(); 
    input2.append(parts[i]); 
    input2=input2.reverse(); //reverses the 8 bits chunks 

    parts[i] = input2.toString(); 
    System.out.println(parts[i]); 





    } 



    for(int g =0; g<parts.length; g++){ 
     double Sum=0; 
     for(int h=7; h>=0; h--){ 

      char s = parts[g].charAt(h); //error on this line 
      int y = Character.getNumericValue(s); 
      Sum = Sum+(Math.pow(2,7-h)*y); //computes decimal value 


     } 

     Double d = new Double(Sum); 
     int i = d.intValue(); 
     System.out.println(i+"."); 

    } 

} 



public static void main(String[] args) { 

    IPconversion object = new IPconversion(); 
    object.integertoip(167840383); 


} 
    } 

所以我想寫一個代碼,將4字節整數轉換爲點分十進制(IP地址),但我得到這個錯誤。任何人都可以告訴我爲什麼我得到這個錯誤?該字符串有8個字符!字符串索引超出範圍(轉換整數到IP)

輸出:

11111110010100001000000001010000 


01111111 

00001010 

00000001 

00001010 

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 7 
    at java.lang.String.charAt(String.java:658) 
    at ipconversion.IPconversion.integertoip(IPconversion.java:66) 
    at ipconversion.IPconversion.main(IPconversion.java:86) 
Java Result: 1 
+0

你確定你使用這段代碼嗎?它似乎爲我工作 – SomeJavaGuy

+0

此代碼工作正常只是測試它 –

+0

@KevinEsche是我使用此代碼,但每次我運行它它會給出此錯誤。 –

回答

0

本準則適用於我也。 (下jdk8運行32 & 64位)

你可以嘗試檢查此步驟:

  1. 檢查你的項目沒有任何錯誤(問題日誌爲空)。
  2. 清潔工程。
  3. 複製代碼粘貼到一個新的乾淨的項目。

由於某些環境錯誤,可能是編譯器沒有運行該代碼,可能是構建路徑問題。它會發生什麼,它正在運行一些最後的良好構建。

編輯:

我不是正則表達式主,但有一個有線問題。我通過在線編譯器運行你的代碼,我得到了錯誤。 由於某些原因,拆分零件不會返回任何結果。 什麼幫助的代碼行更改爲此:

String [] parts = c.split (Pattern.quote(regex)); //stores 8 bits chunks in array 

進口:import java.util.regex.Pattern;

+0

我複製粘貼代碼並創建一個新項目,仍然給出錯誤! –

+0

看看編輯,它看​​起來有一些有線行爲,其正則表達式 –

0

此代碼對我的作品。什麼是您的JDK版本?它是Java 8嗎?

+0

它的JDK 7,是導致問題的版本? –

0
for(int g =4; g>=1; g--){ //changed this line 
     double Sum=0; 
     for(int h=7; h>=0; h--){ 

      char s = parts[g].charAt(h); 
      int y = Character.getNumericValue(s); 
      Sum = Sum+(Math.pow(2,7-h)*y); 


     } 

     Double d = new Double(Sum); 
     int i = d.intValue(); 
     System.out.print(i+"."); 

    } 

所以我改變了第一個循環的參數,它現在工作正常。問題是零件數組的大小,我認爲它的大小是4,而它的大小實際上是5!我發現它在第0個索引處沒有任何存儲,實際上是造成問題的原因!