2012-02-09 105 views
0

我正在打开一个文本文件,格式如下,并将其放入一个2d数组列表中,其中每个对象(而不是每行)都有自己的索引。将不同长度的行添加到2d数组列表中

5 
1 a w e r s 5 2 d 6 
f s d e a 3 6 7 1 32 
2 f s 6 d 
4 s h y 99 3 s d 
7 s x d q s 

我有,其中大部分涉及而(scanner.hasNext()),或尝试了多种解决方案,同时(scanner.hasNextLine())循环,在一排中的所有对象分配给自己的指数之1d阵列列表,然后将该阵列列表添加到2d阵列列表。但无论我做什么,我都不会得到我想要的结果。

我在本质上试图做的是诸如扫描仪的.hasNext()方法,它只抓取一行内的下一个对象,而不会跳到下一行。我尝试的一个示例如下:

while (scanner.hasNextLine()) { 
    ArrayList<Object> array = new ArrayList<Object>(); 
    while(scanner.hasNext()0 {  

     String line = scanner.next(); 
     array.add(line); 
     } 

     System.out.println(array); 
     2dArray.add(array); 
    } 

    scanner.nextLine(); 
} 
+0

这不可能是你的尝试之一;它不会编译。 ('2dArray'不是合法的Java标识符;内部'while'行有错字;大括号不匹配。) – 2012-02-09 22:40:37

回答

0

您需要通过外循环每次分配一个新的数组,而不是清除现有的阵列。此外,可能最容易为每行设置一个新的扫描仪:

while (scanner.hasNextLine()) { 
    String line = scanner.nextLine(); 
    Scanner lineScanner = new Scanner(line); 
    ArrayList<String> array = new ArrayList<String>(); 
    while (lineScanner.hasNext()) { 
     array.add(lineScanner.next()); 
    } 
    my2Darray.add(array); 
} 
+0

谢谢...这太棒了! – 2012-02-09 22:55:15

0

使用BufferedReader可以一次读取一行文件。

BufferedReader br = new BufferedReader(...); 
while ((strLine = br.readLine()) != null) { 
    String[] strArray = strLine.split("\\s"); 
    // do stuff with array 
} 

然后将字符串分割为空格,这会给您一个String [],并且很容易转换为List。像这样的:How do I split a string with any whitespace chars as delimiters?

相关问题