Java NetBeans:为什么我的字符串数组过早终止?

Java NetBeans:为什么我的字符串数组过早终止?,java,arrays,csv,netbeans,Java,Arrays,Csv,Netbeans,我发现了问题。显然,csv文件中的一些名称中存在随机空格,这导致了第257个条目的中断,以及后来的其他几个条目。所以,我只是拿出了空间,现在一切都正常了。感谢所有试图帮忙的人 我有一个从csv文件读取的代码,将值放在字符串数组中,然后打印出来供我查看。它可以正常运行,直到到达数组的第257个成员(每个成员有3个值:姓氏、名和出生年份)。以下是代码的运行版本: package testing.csv.files; import java.io.File; import java.io.File

我发现了问题。显然,csv文件中的一些名称中存在随机空格,这导致了第257个条目的中断,以及后来的其他几个条目。所以,我只是拿出了空间,现在一切都正常了。感谢所有试图帮忙的人

我有一个从csv文件读取的代码,将值放在字符串数组中,然后打印出来供我查看。它可以正常运行,直到到达数组的第257个成员(每个成员有3个值:姓氏、名和出生年份)。以下是代码的运行版本:

package testing.csv.files;


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


public class Test {

public static void main(String[] args) {
    //.csv comma separated values
    String fileName = "C:/Users/Owner/Desktop/Data.csv";
    File file = new File(fileName); // TODO: read about File Names
    try {
        Scanner inputStream = new Scanner(file);
        inputStream.next(); //Ignore first line of titles
        while (inputStream.hasNext()){
            String data = inputStream.next(); // gets a whole line
            String[] values = data.split(",");
            System.out.println(data);
        }
        inputStream.close();

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }

}
现在,当我换线的时候

 System.out.println(data);
为此:

 System.out.println(values[2]);
我所期望的只是为数组中的每个人打印出生年份(第3列)。但是,它只打印到第257个人的出生年份(超过18000人),并向我提供以下错误消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at testing.csv.files.Test.main(Test.java:22)
 Java Result: 1
 BUILD SUCCESSFUL (total time: 0 seconds)

“java:22”似乎是指我在上面发布的、经过修改的代码片段。我真的不确定问题出在哪里。如果我的语法错了,为什么要打印呢?我唯一能想到的是,一个字符串数组可能只能处理257个不同的人,每个人都有自己的3个值。如果是这样,那么我需要某种更大版本的字符串来保存我的所有数据。以前有人遇到过这个问题吗?我的语法和循环中有问题吗?

如果
值数组中只有两个值,那么可以索引到的最高位置是
1

对于数组,只能索引到
size-1
spot;也就是说,如果数组大小为10,则可以索引到位置9或更详细的位置:
array[9]

将索引语句更改为:

System.out.println(values[1]);
更改:

String data=inputStream.next()//next()只能读取输入,直到空格

致:

String data=inputStream.nextLine()//nextLine()读取包含单词之间空格的输入


另外,更好的方法是迭代数组,而不是通过索引访问。索引可能是csv中不包含第三列的特定行。

您可能希望看到csv文件中的第257条记录。split方法会为它创建三个标记吗?如果生成的令牌少于三个,并且您尝试通过键入来打印第三个令牌

System.out.println(values[2]); 

您将获得ArrayIndexOutOfBoundsException。

如果您仔细阅读我写的内容,您将看到数组的每个成员都有3个值,因此我已经完成了您建议的操作。如果你有其他想法,请告诉我。不是根据拆分和ArrayIndexOutOfBoundException。我会通过打印
值的大小来验证您有多少个元素。我尝试了这个方法,但现在没有打印任何值,并且我得到了错误消息:线程“main”java.lang.ArrayIndexOutOfBoundsException:2 at testing.csv.files.Test.main(Test.java:22)java结果:1构建成功(总时间:0秒)您可以粘贴出现问题的csv行吗?您正在调用inputStream.next()并且您的注释说//获取整行。如果这是真的,那纯粹是因为偶然。您应该使用inputStream.nextLine()获取文件的下一行