2017-10-19 27 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()

相关问题