我有以下代码尝试从字符串中删除非数字:
(apply str
(flatten
(map
(fn[x]
(if (number? x) x))
"ij443kj"
)
)
)
但它总是返回一个空字符串而不是“443”。有谁知道我在这里做错了什么以及如何才能得到理想的结果?
答案 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")