2013年2月6日水曜日

[Clojure]文字列からReaderを作る

文字列を直接指定することはできないので、 getBytes メソッドで配列を取得して ByteArrayInputStreamを作成することで、指定した文字列を読み込むことのできるReaderを作成できます。

(->> (.getBytes "hoge")
     java.io.ByteArrayInputStream.
     java.io.InputStreamReader.
     java.io.BufferedReader.
     .readLine)
;; => "hoge"

(with-open [r (clojure.java.io/reader (.getBytes "Hello\nWorld\n"))]
  (list (.readLine r)
        (.readLine r)))
;; => ("Hello" "World")

2 件のコメント:

  1. 私だったら StringReader と line-seq を使うかも:

    user=> (import '(java.io StringReader BufferedReader))
    java.io.BufferedReader

    user=> (-> "Hello\nWorld\n" StringReader. BufferedReader. line-seq)
    ("Hello" "World")


    返信削除
    返信
    1. アドバイスありがとうございます。
      StringReaderの方が短くて良いですね。
      Java側の知識も増やしていこうと思います。


      削除