2014-02-15 48 views
0

我發現了這個問題。顯然,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個值。如果是這樣的話,那麼我需要某種更大版本的字符串來保存我所有的數據。有沒有人遇到過這個問題?我的語法和循環中有問題嗎?

+0

你正在調用inputStream.next(),你的評論說//得到一整行。如果這是真的,那僅僅是因爲純粹的機會。你應該使用inputStream.nextLine()來獲取文件的下一行 – elToro

回答

0

如果values陣列中只有兩件事,那麼您可以索引的最高位置是1

對於數組,您只能索引到size - 1個點;也就是說,如果您的數組大小爲10,則可以將索引指向9或更詳細的位置:array[9]

更改索引語句來此:

System.out.println(values[1]); 
+0

如果你仔細閱讀我寫的內容,你會發現我對數組中的每個成員都有3個值,所以我已經完成了你的工作提供諮詢服務。如果您有其他想法,請告訴我。 – user3274463

+0

不根據拆分和ArrayIndexOutOfBoundException。我會通過打印'values'的大小來驗證你有多少元素。 – Makoto

0

變化:

String data = inputStream.next(); //的next()可以讀取輸入只能做到空間

到:

String data = inputStream.nextLine();// nextLine()讀取輸入,其中包含單詞間的空格

另外更好的方法是迭代數組,而不是通過索引訪問可能是csv中不包含第三列的特定行。

+0

我試過了,但現在沒有打印任何值,並且我收到了以下錯誤消息:線程「main」中的異常java.lang.ArrayIndexOutOfBoundsException:2 \t at testing.csv.files.Test.main(Test.java :22) Java結果:1 BUILD SUCCESSFUL(總時間:0秒) – user3274463

+0

可以粘貼出現問題的csv行嗎? – Kick

0

您可能希望在csv文件中看到第257條記錄。拆分方法會爲它創建三個令牌嗎?如果應該導致在不到三年的令牌,並嘗試通過鍵入

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

打印第三個令牌,你會得到一個ArrayIndexOutOfBoundsException。

相關問題