Clojure从字符串中删除非数字

Zub*_*air 5 clojure

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

(apply str 
    (flatten 
        (map 
            (fn[x] 
                (if (number? x) x)) 
                "ij443kj"
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

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

deo*_*ong 17

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

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

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

甚至更好

(apply str (filter #(Character/isDigit %) myString))
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您不需要在函数中包装您.设置implments IFn,这样你就可以写(过滤#{\ 1\2\3}"abc123def") (8认同)
  • 太好了,对我也起作用:我只是Doubles遇到了一个问题,所以我将其更改为:(过滤器#(#{\ 0,\ 1,\ 2,\ 3,\ 4,\ 5,\ 6, \ 7,\ 8,\ 9,\。}%)my-double-number)谢谢! (2认同)

Jul*_*ang 7

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

(.replaceAll "ij443kj" "[^0-9]" "")
Run Code Online (Sandbox Code Playgroud)