2015-11-18 45 views
1

我有一个简单的文本文件:阵列IndexOutOfBoundsException异常

John Jobs 225 Louis Lane Road 
Amy Jones 445 Road Street 
Corey Dol 556 The Road 

在那里我有人们首先,姓氏和地址

我试图分析它们是这样的:

public void parseText() { 

     try { 
      File file = new File("test.txt"); 
      String[] splitted; 

      Scanner sc = new Scanner(file); 

      while (sc.hasNextLine()) { 
       String s = sc.nextLine(); 
       splitted = s.split("\\s+"); 
       System.out.println(splitted[0]); 
      } 
      sc.close(); 
     } catch (FileNotFoundException e) { 
      System.out.println("Error");  } 

    } 

splitted [0]正常工作,打印出人物的名字。 splitted [1]打印出姓氏,但给我一个IndexOutOfBoundsException。 spitted [2]打印出每个地址的第一个整数值,但又给我一个例外。

于是我试着这样做:

String[] splitted = new String[4]; 

,并再次试图比0访问任何指数更大,但仍然有这个问题。 我在做什么错?

+0

您是否尝试过调试?在“split”之前打印出“String s”,看看它实际得到了什么。然后在分配它之后尝试打印出'splited'数组。看看它显示的是什么 – 3kings

+1

嗯,它看起来是字符串s,是整个文本文件(当打印出来,在字符串拆分之前)。 – TopKek

+0

啊,所以你不能在每行后面的文件中有新的行字符 – 3kings

回答

0

这是你的文件的内容:

John Jobs 225 Louis Lane Road 
Amy Jones 445 Road Street 
Corey Dol 556 The Road 

当每一行被读和拆分,splitted将包含第一次运行下一个运行6元和5。所以如果你不仔细使用索引,你显然会得到IndexOutOfBoundsException

更好

的方法是使用foreach循环:

while (sc.hasNextLine()) { 
       String s = sc.nextLine(); 
       splitted = s.split("\\s+"); 
       //System.out.println(Arrays.toString(splitted)); 
       for (String string : splitted) { 
        System.out.print(string+" "); 
       } 
       System.out.println(); 
.....rest of code