【问题标题】:Array index out of bound, why?数组索引超出范围,为什么?
【发布时间】:2014-01-25 03:41:09
【问题描述】:

代码相当简单,但我不知道为什么会出现此错误。

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] - "***") 上可能有问题,我看了看但没有运气。

【问题讨论】:

  • 你确定values的最小长度是4吗?
  • 确保值数组的长度至少为 4。
  • 出现这里的错误是因为数组在某些情况下没有索引为3的项。根据您的拆分,可能没有足够的逗号分隔值,例如 ("hello, world, bye") 会导致此类错误,而 ("hello, world, bye, foo") 不会。
  • 不是值的最小长度是随机的,我只是想打印 4 个索引值?
  • 我建议您检查文件“States.csv”的内容。检查 System.out.println(values[2] + "***");看看会发生什么。

标签: java arrays


【解决方案1】:

因为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");
        }
    }
}

【讨论】:

  • 我还想重申@RakeshKR 所说的话。尝试关闭 finally 块中的流以确保它们已关闭,即使捕获到异常也是如此。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    建议:

    在 finally 块中关闭您的流

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-05
        • 1970-01-01
        • 2016-07-01
        • 2015-09-12
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        相关资源
        最近更新 更多