json编码的字符串被传递到我的函数中,我需要根据分隔符拆分该字符串,然后将前两个分隔的值转换为整数,并将它们分配给将在函数中使用的变量。我已经有了可行的代码,虽然它看起来很笨拙。
(:use [clojure.string :only (split trim)])
(:use [clojure.data.json :only (json-str write-json read-json)])
(defn parse-int [s] (Integer. (re-find #"[0-9]*" s)))
(map parse-int (take 2
(map trim (seq (.split #"\|"
(read-json "\" 123 | 456 | 789 \""))))))
为了简单起见,我对我的示例输入值进行了硬编码,因此可以在REPL中轻松复制。
我希望结果:(123 456)
(在我的代码中,分配给(let [[a b]
)
正如我所说,这段代码有效,但我觉得我必须遗漏一些会让它变得不那么丑陋,更具惯用性的东西。
答案 0 :(得分:1)
我认为这更清楚:
(:use [clojure.string :only (split trim)])
(:use [clojure.data.json :only (read-json)])
(map #(Integer/valueOf (trim %))
(split (read-json input) #"\|"))
假设input
是您的输入字符串。
Integer/valueOf
(或者Integer/parseInt
)似乎是您失踪的主要内容。不需要正则表达式。