2017-10-19 26 views
0

我想從java中的文本文件讀取一行。我得到一個java.lang.ArrayIndexOutOfBoundsException: 1例外。Java .split()由字符串中的空格組成

這裏是我的代碼:

try { 
    Scanner kb = new Scanner(new FileReader(fileName)); 
    String line = ""; 
    int count = 0; 
    while (kb.hasNext()) { 
     line = kb.next(); 
     String[] temp = line.split("#"); 
     System.out.println(temp[1]); 
     Wedding tempWed = new Wedding(temp[0], temp[1], temp[2], temp[3], Integer.parseInt(temp[4])); 
     test[count] = tempWed; 
     count++; 
    } 
} catch (FileNotFoundException ex) { 

} 

這是文本文件的行:
Chiquita Sanford#Magee Sosa#2016-11-05#Garden#84

我需要用 「#」 分裂,而這部分工作。 當我嘗試訪問位置1處的元素時,Java拋出異常。 我認爲這是因爲名字和姓氏之間存在空格,因爲當我顯示「Chiquita」而不是「Chiquita Sanford」時。

當第一個數組索引中有多個單詞時,Java是否對分割有一些限制。

+3

將'kb.next()'更改爲'kb.nextLine()',並將'kb.hasNext()'更改爲'kb.hasNextLine()'。 – Andreas

+1

更好的是,不要使用'掃描儀',因爲它很慢。改爲使用'BufferedReader'及其''readLine()'方法。 – Andreas

回答

3

您必須使用nextLine方法來閱讀完整行。 next將讀取,直到第一個標記(您的案例中的「Chiquita」,因爲它後跟一個空格字符並被解釋爲分隔符)。因此,改變這一行:

line = kb.next(); 

與此:

line = kb.nextLine(); 
+0

謝謝!我的咖啡高已經到了高原。知道我們犯了一個愚蠢的錯誤! – keziakoko

2

您正在使用kb.next()將返回下一個單詞不下一行,對於這個用途kb.nextLine()類似的問題與kb.hasNext()需要爲kb.hasNextLine()

相關問題