2013-01-03 58 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之外实现时,该文件就已经被关闭了。