我發現了這個問題。顯然,csv文件中的某些名稱中存在隨機空格,導致在第257條條目以及其他幾條條目中出現中斷。所以,我只是拿出空間,現在一切正常。感謝所有試圖幫助的人。Java NetBeans:爲什麼我的字符串數組提前終止?
我有這樣的代碼,從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個值。如果是這樣的話,那麼我需要某種更大版本的字符串來保存我所有的數據。有沒有人遇到過這個問題?我的語法和循環中有問題嗎?
你正在調用inputStream.next(),你的評論說//得到一整行。如果這是真的,那僅僅是因爲純粹的機會。你應該使用inputStream.nextLine()來獲取文件的下一行 – elToro