Clojure从字符串中删除非数字

Clojure从字符串中删除非数字,clojure,Clojure,我有以下代码尝试从字符串中删除非数字: (apply str (flatten (map (fn[x] (if (number? x) x)) "ij443kj" ) ) ) 但它总是返回一个空字符串,而不是“443”。有人知道我在这里做错了什么,以及我怎样才能得到想要的结果吗?不是那样的。它检查类型。如果你给它传递一个字符,无论字符是什么,每次都会

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

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

但它总是返回一个空字符串,而不是“443”。有人知道我在这里做错了什么,以及我怎样才能得到想要的结果吗?不是那样的。它检查类型。如果你给它传递一个字符,无论字符是什么,每次都会返回false

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

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

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

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

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

获取字符的int值

(map int (apply vector "0123456789"))
->(48 49 50 51 52 54 55 56 57)

然后修复它:

(defn my-int
[char]
(- (int char) 48))
现在让我们再试一次,好吗

(map my-int (apply vector "0123456789"))
->(01 2 3 4 5 6 7 8 9)

为了得到一个温暖而模糊的结果,它们是整数

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


->45

以防您将

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

是的,你是对的。我同意这个数字?不是那样的。我应该使用哪一个函数呢?请注意,您不需要将设置包装到函数中。设置implements IFn,这样你就可以写(filter{\1\2\3}“abc123def”)这对我来说也很好:我只是对double有一个问题,所以我改变了它:(filter{\0,1,2,3,4,5,6,7,8,9,11%)我的double number)谢谢!
#(re-seq #"[0-9\.]+" "ij443kj")