我在java中有这段代码
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 :(得分:3)
不清楚你想要什么,但是,如果想要读取文本文件并将每一行存储到一个元素数组中,并且如果文件的大小不是很大,你可以试试这个:
(use '[clojure.string :only (split)])
(split (slurp "file_name.txt") #"\r\n"))
答案 1 :(得分: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之外实现时,该文件就已经被关闭了。