我可以在repl中读取这样的一些数据.对于一个真正的程序,我计划以let特殊形式分配.
(def x1 (line-seq (BufferedReader. (StringReader. x1))))
Run Code Online (Sandbox Code Playgroud)
如果我输入5 5,则x1被绑定("5 5")
我想将一个元素的列表转换为两个整数的列表.我怎样才能做到这一点?我一直在玩解析空格上的字符串,但是在执行转换为整数时遇到了问题.
这有帮助吗?在Clojure 1.3.0中:
(use ['clojure.string :only '(split)])
(defn str-to-ints
[string]
(map #(Integer/parseInt %)
(split string #" ")))
(str-to-ints "5 4")
; => (5 4)
(apply str-to-ints '("5 4"))
; => (5 4)
Run Code Online (Sandbox Code Playgroud)
如果您使用的Clojure版本没有clojure.string命名空间,您可以跳过use命令并按以下方式定义函数.
(defn str-to-ints
[string]
(map #(Integer/parseInt %)
(.split #" " string)))
Run Code Online (Sandbox Code Playgroud)
你可以(.split string " ")在最后一行使用摆脱正则表达式.
小智 5
适用于所有数字并在它不是数字的情况下返回 nil(因此您可以在结果序列中过滤掉 nil)
(require '[clojure.string :as string])
(defn parse-number
"Reads a number from a string. Returns nil if not a number."
[s]
(if (re-find #"^-?\d+\.?\d*$" s)
(read-string s)))
Run Code Online (Sandbox Code Playgroud)
例如
(map parse-number (string/split "1 2 3 78 90 -12 0.078" #"\s+"))
; => (1 2 3 78 90 -12 0.078)
Run Code Online (Sandbox Code Playgroud)