-2

我想创建一个循环,使用 Inetaddress 类型的基本机制的 IP 地址来 ping LAN 中的 PC。我正在尝试将其转换为整数形式,但发生错误。

这是我的代码;错误在第 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++)

ArrayIndexOutOfBoundsExceptioni到达时也会给出一个4。请记住,数组索引从 0 开始。您需要

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

或者更好

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

您正在使用一个循环,但使用 2 个数组。

于 2013-10-01T21:52:23.337 回答