将数组中的字符串拆分为3个其他时的ArrayIndexOutOfBoundsException

时间:2016-01-11 04:04:53

标签: java arrays string parsing split

这是我的代码:

for (int i = 0; i < 99; i++)
{

String inputString = keyboard.next();
String[] inputArray = inputString.split(":");

if (inputString.equals("quit"))
    System.out.println("You have quit");

FirstArray[i] = inputArray[0];
SecondArray[i] = Integer.parseInt(inputArray[1]);  // these throw errors
ThirdArray[i] = Integer.parseInt(inputArray[2]);    

System.out.println(FirstArray[i]);
System.out.println(SecondArray[i]);
System.out.println(ThirdArray[i]);

所以这是我的代码,我正在尝试测试数组,我需要使用分隔符来获取用户分割的输入“:”

我必须parseInt最后两个数组(因为它们采用整数值)才能从inputArray的第二和第三个索引获得拆分输入。

我有代码的最后一部分来测试它是否有效,而且确实如此,但当我输入“quit”来结束它抛出的循环时:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

我已经搜索并理解了这个问题,但不知道如何避免它。对不起,如果我不解释我的问题,将会感谢另一个有效的解决方案。在此先感谢您的帮助

4 个答案:

答案 0 :(得分:1)

字符串“quit”不包含任何“:”字符,因此inputArray[1]的结果是包含单个元素的数组。因此,只要您尝试访问if (inputString.equals("quit")) { System.out.println("You have quit"); return; // add this line } ,就会有异常,因为索引1引用数组中的第二个元素,尽管此数组只有一个元素

spark-submit

添加return语句(如上所示),这将通过代码有问题的代码。无论如何,这似乎是正确的做法,因为用户要求退出程序。

答案 1 :(得分:1)

仅访问inputArray直到其长度,即首先使用inputArray.length()查找数组长度,然后从0 to length -1访问数组元素。

您的代码中最明显的情况是当您输入quit但其他输入也可能导致它,因为您没有检查数组的长度,即如果任何输入的分割数组的长度小于3,您将收到这个例外。

答案 2 :(得分:0)

您遇到的问题是无论是否收到quit命令,都会运行访问inputArray变量的代码。你有两个选择。

1)返回退出命令(推荐)

if (inputString.equals("quit")) {
    System.out.println("You have quit");
    return; // This will avoid running the code below
}

FirstArray[i] = inputArray[0];
SecondArray[i] = Integer.parseInt(inputArray[1]);  // these throw errors
ThirdArray[i] = Integer.parseInt(inputArray[2]);    

System.out.println(FirstArray[i]);
System.out.println(SecondArray[i]);
System.out.println(ThirdArray[i]);

2)将剩下的代码丢弃在其他案例中

if (inputString.equals("quit")) {
    System.out.println("You have quit");
} else {
    FirstArray[i] = inputArray[0];
    SecondArray[i] = Integer.parseInt(inputArray[1]);  // these throw errors
    ThirdArray[i] = Integer.parseInt(inputArray[2]);    

    System.out.println(FirstArray[i]);
    System.out.println(SecondArray[i]);
    System.out.println(ThirdArray[i]);
}

如果inputArray没有达到预期的长度,我还建议添加一个错误案例。

if (inputArray.length != 3) {
    System.out.println("That's weird. I was expecting 3 parameters, but only found " + inputArray.length);
    return;
}

答案 3 :(得分:0)

您可以使用Scanner类来阅读输入。

Scanner scanner = new Scanner(System.in);
for(int i=0; i<Noofiterations; i++){ //iterations are the no.of times you need to read input.
  String[] inputArray = scanner.nextLine().split(":");
//rest of the code is same as yours.
}
Input should be in the form "abc:123:334:wet"

希望这会有所帮助。如果我没有得到您的问题,请告诉我。