2013-08-20 68 views
2
10 
aaa aaa aaa 
bbb bbb bbb 
ccc ccc ccc 
ddd ddd ddd 

我有一个文本文件,我试图读取与制表符分隔符。每当我读取文件时,我会在10之后得到一个arrayindexoutofbound错误。我在线搜索并发现我必须在\ t后面添加-1,但我仍然得到相同的错误。阅读制表符分隔的文本文件java

try{ 
     Scanner scan = new Scanner(new File("1.txt")); 
     String line=""; 
     int readline = Integer.parseInt(scan.nextLine());// 

     while (scan.hasNextLine()) 
     { 
      line = scan.nextLine(); 

      if(line.equals("ccc")) 
      { 
       break; 
      } 
     String[] split=line.split("\t"); 

      array.add(split); 
     } 
+0

你知道,什么'破'声明呢? – EarlGrey

+0

以及为什么使用parseInt?这是为了从一个字符串中获取int值。 – AurA

+1

无论出于何种原因,显然都意味着成为第一行的数字。 没有我可以在鳕鱼眼中看到的地方,如果发现这会导致数组索引超出范围。你可以发布更多的代码或堆栈跟踪? – Link19

回答

0

这样你的代码失去了这个丑陋的休息(休息是大部分时间避免...)

try{ 
    Scanner scan = new Scanner(new File("1.txt")); 
    String line=""; 
    int readline = Integer.parseInt(scan.nextLine());// 

    while (scan.hasNextLine()) 
    { 
     line = scan.nextLine(); 

     if(!line.equals("aaa")){ 
      String[] split=line.split("\t"); 
      array.add(split); 
     } 
    } 

而关于你的问题,我认为你是对的整数初始化您的数组第一行,但它是10,你有12个元素。因此,索引越界,但你的问题仍不清楚......

+0

你不能硬编码“aaa”或任何事情 – Rakesh

+0

嗯,我只是遵循示例格式,但是你是对的。 – Marc

+1

你们两个都知道这些,你不知道他想达到什么目的。它们都没有回答这个问题! – Link19

12

如果你是使用Scanner这里没有必要split,您可以在这里使用next()如下

Scanner sc=new Scanner(new FileReader("D:\\test.txt")); 
    while (sc.hasNextLine()){ 
     System.out.println(sc.next()); 
    }