如何在Clojure中将字符串转换为两个整数?

时间:2011-10-01 23:32:36

标签: string clojure integer

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]

正如我所说,这段代码有效,但我觉得我必须遗漏一些会让它变得不那么丑陋,更具惯用性的东西。

1 个答案:

答案 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)似乎是您失踪的主要内容。不需要正则表达式。