2016-10-02 165 views
1

的二维数组列表所以我想为.txt文件转换为转换.txt文件为字符串

1 2 3 4 
5 6 7 8 
9 1 0 1 

的格式转换成字符串数组列表2D。 这也应该复制任何其他东西,如

EXTENDING RETRACTING RETRACTING EXTENDING 
EXTENDING EXTENDING RETRACTING 
RETRACTING 

这里是我的代码

public class Test { 
    public static ArrayList<ArrayList<String>> readFromFile(String path) throws FileNotFoundException{ 
     @SuppressWarnings("resource") 
     Scanner in = new Scanner(new File(path)); 
     ArrayList<ArrayList<String>> comments= new ArrayList<ArrayList<String>>(); 
     ArrayList<String> words = new ArrayList<String>(); 
     String[] line; 
     String str; 
     String [] values; 
     while(in.hasNextLine()){ 
      str=in.nextLine(); 
      line = str.split("\t"); 
      values = line[2].split(" "); 
      for(String word : values){ 
       words.add(word); 
      } 
     } 
     comments.add(words); 
     return comments; 
     } 

    public static void main(String[] args) throws FileNotFoundException{ 
     ArrayList<ArrayList<String>> inputs = readFromFile("/Users/Jason/yaw.txt"); 
     int k = 0; 
     for(int i = 0; i < inputs.size(); i++){ 
      for(int j = 0; j < inputs.get(k).size(); j++){ 
       System.out.print(inputs.get(i).get(j)); 
       k++; 
      } 
      System.out.println(); 
     } 
    } 
} 

目前,它返回此错误。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 
    at Test.readFromFile(Test.java:19) 
    at Test.main(Test.java:31) 

有关如何使这项工作的任何帮助?

回答

0

这是一个方法来解决这个问题:

// read file into list 
    List<String> linesInFile = Files.readAllLines(Paths.get("filename.txt")); 
    // create 2d array based on number of lines 
    List<List<String>> array = new ArrayList<>(linesInFile.size()); 

    // iterate through every line of the file and split the elements using whitespace 
    linesInFile.forEach(line -> { 
     // get the elements in the current line 
     String[] elements = line.split("\\s+"); 
     // store it in our 2d array 
     array.add(Arrays.asList(elements)); 
    }); 

    // print every row in our 2d array 
    array.forEach(System.out::println); 

Files.readAllLines方法将返回在你的文件中的所有行列表(类似于你自己的版本是什么)。

编辑:转换List<List<String>>ArrayList<ArrayList<String>>像以下:

ArrayList<ArrayList<String>> arrayList = new ArrayList<>(); 
    array.forEach(row -> arrayList.add(new ArrayList<>(row))); 

    System.out.println(arrayList.getClass()); 
    System.out.println(arrayList.get(0).getClass()); 

将输出:

>> class java.util.ArrayList 
    >> class java.util.ArrayList 
+0

这不是在数组列表中的权利?所以这不是真的有效。 :^( –

+0

@JasonLiu这是真的,我没有得到,我相应地更新了我的答案。 – Selim

+0

哦,工作 - 谢谢! –

0

你读一行,然后用"\t"分割它,它给你一个1值的数组(长度= 1)。

lines[2]因此出界。

如果我明白你正确的,那么你想做的事:

line = str.split("\\s"); // line=[1, 2, 3, 4] for the first line you read 

split("\\s")分裂所有空格字符(这样不仅““)

如果不是这种情况,那么检查什么STR包含的内容。

不知道为什么你这样做:

values = line[2].split(" "); 
+0

你有任何想法如何,我能得到这个工作? –