如何在Clojure中判断字符是否为ASCII大写字母
我有一张这样的序号:如何在Clojure中判断字符是否为ASCII大写字母,clojure,ascii,Clojure,Ascii,我有一张这样的序号: (\$ \# \A \( \* \& \9 \8 \7 \Z \f) 我想过滤掉其中的大写ASCII字母,如\A和\Z 我试着在标准图书馆里查找,但没有成功 有人能帮我吗?使用以下命令 (filter #(Character/isUpperCase %) `(\$ \# \A \( \* \& \9 \8 \7 \Z \f)) 结果:(\A\Z)这更详细,但您也可以定义自己的函数来执行此操作: (defn cap-detector [x] (l
(\$ \# \A \( \* \& \9 \8 \7 \Z \f)
我想过滤掉其中的大写ASCII字母,如\A和\Z
我试着在标准图书馆里查找,但没有成功
有人能帮我吗?使用以下命令
(filter #(Character/isUpperCase %) `(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
结果:
(\A\Z)
这更详细,但您也可以定义自己的函数来执行此操作:
(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检测器
,将得到您想要的:
(cap-detector '(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
; => (\A \Z)
或者也可以使用
re-seq
和正则表达式:
((fn[x]
(顺序(应用str(re-seq#“[A-Z]”(应用str x()(#))))
“(\$\\\\A\(\*\&\9\8\7\Z\f))
它还返回(\A\Z)
我的解决方案:
(filter (set (map char (range 65 91)))
'(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
返回:
'(\A \Z)
谢谢。这是一个java函数哈哈。如果不使用java:
(filter#(not=(str%)(clojure.string/lower-case%)`(\$\\\a\(\*\&\9\8\7\Z\f))
假设x
已经是一个字符串,最里面的(apply str x)
可以替换为x
。