Clojureの文字はjava.lang.Characterのプリミティブで、相互運用を通じてCharacterクラスのメソッドを使って操作できます。
(Character/isDigit \2)
;;=> true
Clojureには強力な文字列処理ライブラリであるclojure.stringが付属しています。多くの場合、相互運用よりもこちらのほうが慣用的です。
この演習では、エンジニアが識別子名をきれいにするのを助ける、ユーティリティルーチンの一部を実装します。
5つのタスクを通して、clean関数を少しずつ作り上げていきます。有効な識別子は、0個以上の文字とアンダースコアで構成されます。
どの場合でも、入力の文字列はnil以外であることが保証されています。関数に空の文字列が渡された場合は、空の文字列を返すようにします。
なお、空の識別子で関数を呼び出すのは避けましょう。そのような識別子には意味がないからです。
clean関数を実装して、空白をアンダースコアに置き換えます。先頭と末尾の空白にも適用されます。
(clean "my Id")
;;=> "my___Id"
clean関数を変更して、制御文字を大文字の文字列"CTRL"に置き換えます。文字のコードが'\u0000'から'\u001F'の範囲、または'\u007F'から'\u009F'の範囲にある場合、その文字はISO制御文字とみなされます。
(clean "my\u007FId")
;;=> "myCTRLId"
clean関数を変更して、ケバブケースをキャメルケースに変換します。
(clean "à-ḃç")
;;=> "àḂç"
clean関数を変更して、文字以外の文字をすべて除外します。注意:アンダースコアは前のステップから保持する必要があります。
(clean "1😀2😀3😀")
;; => ""
clean関数を変更して、'α'から'ω'の範囲のギリシャ文字を除外します。
(clean "MyΟβιεγτFinder")
;;=> "MyΟFinder"