clojure.stringの使い方の簡単なまとめ
Clojureで文字列操作するときに使うclojure.stringの、簡単な使い方まとめ。
「ClojureDocsを見ろよ」という話なのだが、主に自分の備忘用にチートシートとしてまとめる。
ClojureDocsのページ
インポート
大前提として、clojure.stringを使用するためにインポートを行う。
(require '[clojure.string :as string])
blank?
空文字であるかを判定する。
(string/blank? "")
;; true
(string/blank? " ")
;; true
(string/blank? "hello")
;; false
(string/blank? nil)
;; false
capitalize
最初の文字を大文字にしてくれる。
(string/capitalize "hello world")
;; Hello world
(string/capitalize "HELLO WORLD")
;; Hello world
(string/capitalize "clojure")
;; Clojure
ends-with?
文字列が特定の文字列で終わるかどうかを判定する関数。
(string/ends-with? "hello world" "world")
;; true
(string/ends-with? "hello world" "hello")
;; false
(string/ends-with? "clojure" "ure")
;; true
(string/ends-with? "clojure" "clo")
;; false
escape
文字列の中の特定の文字をエスケープしたいとき。
(def html-entities {\& "&l" \< "<" \> ">" \" """})
(string/escape "This & that < those > these" html-entities)
include?
ある文字列が別の文字列に含まれているかどうかを判定する。
(string/includes? "hello world" "world")
;; true
(string/includes? "hello world" "clojure")
;; false
index-of
ある文字列が対象の文字列に含まれているかどうかを判定し、その位置を返す。
(string/index-of "hello world" "world")
;; 6
(string/index-of "hello world" "h")
;; 0
(string/index-of "hello world" "l")
;; 2
(string/index-of "hello world" "clojure")
;; nil
join
複数の文字列やシーケンスを特定の区切り文字で結合する。
(string/join ["Hello" "world"])
;; "Helloworld"
(string/join ", " ["Hello" "world"])
;; "Hello, world"
(string/join "-" [1 2 3 4 5])
;; "1-2-3-4-5"
last-index-of
指定された文字列が対象の文字列に最後に出現する位置を返す。
(string/last-index-of "hello world hello" "hello")
;; 12
(string/last-index-of "hello world hello" "hello" 10)
;; 0
lower-case
文字列のすべての文字を小文字に変換する。
(string/lower-case "Hello World!")
;; "hello world!"
(string/lower-case "CLOJURE")
;; "clojure"
re-quote-replacement
文字列置換の際に特殊文字をエスケープする。
例えば、正規表現に$
が含まれていた場合は文末として扱われるが、そのままの文字で扱いたいときは、この関数を用いてエスケープする。
例えば、文末出ない位置にある$name
を、$USER
に変えたいときなど。
使い方がわかりにくかったので、構文を追加している。
;; 構文
;; (string/replace "置換対象の文字列" 正規表現 (string/re-quote-replacement "置換文字列"))
(string/replace "Hello $name, welcome!" #"\$name" (string/re-quote-replacement "$USER"))
;; => "Hello $USER, welcome!"
replace
対象文字列の特定の文字列、または、正規表現パターンに一致する部分を置換する。
(string/replace "hello world" "world" "Clojure")
;; "Hello Clojure"
(string/replace "hello 123 world" #"\d+" "numbers")
;; "hello numbers world"
replace-first
文字列の中の特定の文字列、または、正規表現パターンに一致する最初の出現部分のみを置換する。
ちょっとわかりにくかったので、構文も書いている。
;; 構文
;; (clojure.string/replace-first target pattern replacement)
(string/replace-first "hello world hello" "hello" "hi")
;; "hi world hello"
(string/replace-first "hello 123 world 456" #"\d+" "numbers")
;; "hello numbers world 456"
reverse
文字列を逆順に並べ替える。
(string/reverse "hello")
;; "olleh"
(string/reverse "Clojure")
;; "erujolC"
split
区切り文字や正規表現で文字列を分割。
(string/split "apple,orange,banana" #",")
;; ["apple" "orange" "banana"]
(string/split "hello world clojure" #"\s")
;;["hello" "world" "clojure"]
;; どこまで分割するかの数を指定できる
(string/split "apple,orange,banana" #"," 2)
;; ["apple" "orange,banana"]
split-lines
文字列を行ごとに分割する。
改行文字によって分割される。
(string/split-lines "Hello\nworld\nClojure")
;; ["Hello" "world" "Clojure"]
starts-with?
文字列が特定の文字列で始まっているかを判定する。
(string/starts-with? "hello world" "hello")
;; true
(string/starts-with? "hello world" "world")
;; false
trim
文字列の前後にある空白(スペース、タブ、改行など)を取り除く。
(string/trim " hello world ")
;; "hello world"
(string/trim "\n\tClojure\n\t")
;; #Clojure
trim-newline
文字列の末尾にある改行文字を取り除く。
(string/trim-newline "hello world\n")
;; "hello world"
(string/trim-newline "hello world\r\n")
;; "hello world"
(string/trim-newline "hello\nworld\n")
;; "hello\nworld"
triml
文字列の戦闘にある空白(スペース、タブ、改行など)を取り除く。
(string/triml " hello world ")
;; "hello world "
(string/triml "\t\n Clojure\n")
;; "Clojure\n"
trimr
文字列の末尾にある空白(スペース、タブ、改行など)を取り除く。
(string/trimr " hello world ")
;; " hello world"
(string/trimr "Clojure\n\t ")
;; "Clojure"
Discussion