-2

タイプ Inetaddress のベース メカニズムの IP アドレスを使用して、LAN 内の PC に ping を実行するためのループを作成したいと考えています。整数形式に変換しようとしていますが、エラーが発生しています。

これは私のコードです。エラーは行番号17にあり、エラーはException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at practice.trying.main(trying.java:27)

 /**************************/
    import java.net.*;
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.util.*;
    public class trying {
    public static void main(String[] args) throws IOException
    {
        DataInputStream in = new DataInputStream(System.in);
        String s ;
        int[] ia=new int[4] ;
        System.out.println("enter the ip ");
        s=in.readLine();
        System.out.println(s);
        String st1[]=s.split(".");
        for(int i=0;i<=4;i++)
        {
         ia[i]=Integer.parseInt(st1[i]);
     System.out.println(ia[i]);
        }
    }
    }
    /*********************************/
4

1 に答える 1

1

標準出力に何を入力しても、これは重要ではありません。

String st1[]=s.split(".");

サイズ0の配列になります。

Integer.parseInt(st1[i]);

の任意の値を使用すると、i結果は になりArrayIndexOutOfBoundsExceptionます。その理由String#split(String)は、正規表現パターンが必要だからです。さらに、空の文字列は含まれません。

.は、任意の文字を意味する正規表現の特殊文字です。したがって、任意の文字を分割して空の文字列を破棄しようとしています。したがって、要素がなくなります。

使いたい

String st1[]=s.split("\\.");

.特殊文字が正規表現でエスケープされるようにします。


forループにも注意してください

for(int i=0;i<=4;i++)

また、ArrayIndexOutOfBoundsExceptionいつi到達するかを示し4ます。配列のインデックスは 0 から始まることに注意してください。

for(int i = 0; i < 4; i++)

またはさらに良い

for(int i = 0; i < ia.length; i++)

1 つのループを使用していますが、2 つの配列を使用しています。

于 2013-10-01T21:52:23.337 に答える