2013-01-03 51 views
0

我有這樣一段代碼在java中循環用Clojure和存儲數組

public class read{ 
    private ArrayList <String[]> test = new ArrayList<String[]>(); 

    //arr is a valid array 
//br is a buffered reader 
while(br.readline()) 
    test.add(store(arr[])); 

public String[] store (String[] str_arr) { 
    String a; 
    new_str_arr[] = new String[2]; 
    new_str_arr[1] = str_arr[0]; 
    new_str_arr[0] = "Header"; 
    return new_str_arr; 
} 

我將如何能夠將其轉換成Clojure的?

+0

存儲到一個數組中,我可以看到,但這與循環有什麼關係? – Lynn

+1

class'read'的目的是什麼?你能舉一個例子嗎? – mobyte

+0

我所擁有的實際上是一個閱讀器類讀取文件中的數據,每行將每行存儲爲一個數組元素到一個數組中。由於文件中的行數未知,因此我必須使用while循環。 – aceminer

回答

3

不清楚你想要什麼,但是,如果想閱讀的文本文件,並存儲每個行元素的數組,如果文件不是體積龐大,你可以試試這個:

(use '[clojure.string :only (split)]) 
(split (slurp "file_name.txt") #"\r\n")) 
0

不知道你想要完成什麼。您不會將br.readLine()的結果存儲到String變量中,因此在您的程序中可能不會發生任何有趣的事情。從您提供的文本中,可能會得出結論:

(use 'clojure.java.io) 
(with-open [rdr (reader "/tmp/test.txt")] 
    (doall (map vector (line-seq rdr)))) 

Input file: 
123 
12 
123 
12 
123 
12 
123 
12 
123 

Output: 
(["123"] ["12"] ["123"] ["12"] ["123"] ["12"] ["123"] ["12"] ["123"]) 

該文件逐行讀取,並且一次不在內存中。但結果是。需要doall,因爲map返回一個惰性seq。當lazy seq的一個元素會在with-open之外實現時,該文件就已經被關閉了。