数组索引越界,为什么?

时间:2014-01-25 03:41:10

标签: java arrays

代码相当简单,但我无法弄清楚为什么我会收到此错误。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Project1 {

public static void main(String[] args) {
    String fileName = "States.csv";
    File file = new File(fileName);

    try {
        Scanner stream = new Scanner(file); // or use new File();
        while (stream.hasNext()){
            String data = stream.next();
            String[] values = data.split(",");
            System.out.println(values[3] + "***");
        }
        stream.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

假设system.out.println(values[3] - "***")出现了问题,我看起来却没有运气。

4 个答案:

答案 0 :(得分:5)

因为array的大小可能小于4并且您正在尝试打印4th元素(索引3

打印前检查array长度:

try {
    Scanner stream = new Scanner(file); // or use new File();
    while (stream.hasNext()){
        String data = stream.next();
        String[] values = data.split(",");
        if(values.length>3){
            System.out.println(values[3] + "***");
        }
        else{
            System.out.println("Desired value is missing in this row");
        }
    }
}

答案 1 :(得分:0)

似乎值的长度小于4.这就是它导致值异常的原因[3]。如果要打印最后一个值,则可以使用

        System.out.println(values[values.length - 1] + "***");

或者如果您需要打印第4个索引,请检查值的大小是否小于4

if(values.lenght > 3)
        System.out.println(values[3] + "***");

答案 2 :(得分:0)

请检查最小长度为4的值。

// For printing all splited values
for(String val : data.split(",")){
     System.out.println(val);
}

建议:

在finally块中关闭你的流

注意:数组索引从0开始,而不是从1开始

答案 3 :(得分:0)

尝试查看数据字符串。 split()方法围绕逗号分开。如果原始字符串中只有一个逗号,则values数组的长度仅为2。