2016-10-02 104 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

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

相關問題