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")