Clojure从字符串中删除非数字

时间:2011-05-18 14:23:47

标签: clojure

我有以下代码尝试从字符串中删除非数字:

(apply str 
    (flatten 
        (map 
            (fn[x] 
                (if (number? x) x)) 
                "ij443kj"
        )
    )
)

但它总是返回一个空字符串而不是“443”。有谁知道我在这里做错了什么以及如何才能得到理想的结果?

4 个答案:

答案 0 :(得分:17)

数目?不这样做。它检查类型。如果你传递一个角色,无论角色是什么,你每次都会得到假的。

我可能会使用正则表达式,但是如果你想对程序保持相同的想法,你可以做类似的事情

(apply str (filter #(#{\0,\1,\2,\3,\4,\5,\6,\7,\8,\9} %) "abc123def"))

甚至更好

(apply str (filter #(Character/isDigit %) myString))

答案 1 :(得分:7)

有一种更简单的方法,使用正则表达式:

(.replaceAll "ij443kj" "[^0-9]" "")

答案 2 :(得分:1)

获取char的int值...

(map int (apply vector "0123456789"))

- > (48 49 50 51 52 53 54 55 56 57)

然后解决它:

(defn my-int
[char]
(- (int char) 48))

现在让我们再试一次,好吗?

(map my-int (apply vector "0123456789"))

- > (0 1 2 3 4 5 6 7 8 9)

只是为了得到温暖和模糊,他们是整数...

(map #(* % 10) (map my-int (apply vector "0123456789")))

- > (0 10 20 30 40 50 60 70 80 90)

(reduce + (map my-int (apply vector "0123456789")))

- > 45

答案 3 :(得分:0)

以防您处理十进制

#(re-seq #"[0-9\.]+" "ij443kj")