我得到了这样的seq:
(\$ \# \A \( \* \& \9 \8 \7 \Z \f)
我想过滤掉大写的ASCII字母,如\ A和\ Z
我试图在标准库中查找但没有运气。
有人能帮助我吗?
答案 0 :(得分:20)
使用以下
(filter #(Character/isUpperCase %) `(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
结果:(\A \Z)
答案 1 :(得分:2)
我的解决方案:
(filter (set (map char (range 65 91)))
'(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
返回:
'(\A \Z)
答案 2 :(得分:1)
或者您也可以使用re-seq
和正则表达式:
((fn [x]
(seq (apply str (re-seq #"[A-Z]" (apply str x)))))
'(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
也返回(\A \Z)
。
答案 3 :(得分:0)
这更详细,但您也可以定义自己的功能:
(defn cap-detector [x]
(loop [res []
arg (apply str x)]
(cond (empty? arg) (filter (fn [x] (Character/isLetter x)) res)
:else (if (= (clojure.string/upper-case (first arg)) (str (first arg)))
(recur (conj res (first arg)) (rest arg))
(recur res (rest arg))))))
用你的字符序列调用cap-detector
会给你你想要的东西:
(cap-detector '(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
; => (\A \Z)