Ответ 1
Используйте следующие
(filter #(Character/isUpperCase %) `(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
Результаты: (\A \Z)
У меня получилось так:
(\$ \# \A \( \* \& \9 \8 \7 \Z \f)
Я хочу отфильтровать в нем прописные буквы ASCII, такие как \A и\Z
Я попытался найти стандартную библиотеку, но не повезло.
Может кто-нибудь мне помочь?
Используйте следующие
(filter #(Character/isUpperCase %) `(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
Результаты: (\A \Z)
Мое решение:
(filter (set (map char (range 65 91)))
'(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
Возврат:
'(\A \Z)
Или вы также можете использовать re-seq
и регулярные выражения:
((fn [x]
(seq (apply str (re-seq #"[A-Z]" (apply str x)))))
'(\$ \# \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-detector
с вашей последовательностью символов даст вам то, что вы хотите:
(cap-detector '(\$ \# \A \( \* \& \9 \8 \7 \Z \f))
= > (\ A\Z)