Erlang の string モジュールを一通り試す - その3
OTP 20.0 で string モジュールに多くの関数が追加されていたのに、最近気がついた。一通り試そうと思う。
string モジュールのおさらいをしたい人は下記の記事へ
split/2, split/3 関数
split(String, SearchPattern) -> [unicode:chardata()] split(String, SearchPattern, Where) -> [unicode:chardata()]
Types
String = SearchPattern = unicode:chardata() Where = direction() | all
SearchPatternが検出されたところでStringを分割し、残りの部分を返す。
Whereはデフォルトでleading
。leading
はStringの先頭の最初のSearchPatternで分割する。trailing
はStringの末尾方向から最初のSearchPatternで分割する。
all
を指定するとStringにあるすべてのSearchPatternで分割する。
Example:
> string:split("foo, bar, baz", "ba"). ["foo, ","r, baz"] > string:split("foo, bar, baz", "ba", trailing). ["foo, bar, ","z"] > string:split("foo, bar, baz", "ba", all). ["foo, ","r, ","z"] > string:split("foo, bar, baz", "ab", all). ["foo, bar, baz"]
take
take(String, Characters) -> {Leading, Trailing} take(String, Characters, Complement) -> {Leading, Trailing} take(String, Characters, Complement, Dir) -> {Leading, Trailing}
Types
String = unicode:chardata() Characters = [grapheme_cluster()] Complement = boolean() Dir = direction() Leading = Trailing = unicode:chardata()
文字がCharactersのメンバーである(Complement = false
)またはCharactersを補完する(Complement = true
)文字である限り、Stringから文字を取得する。 Dirは、先頭(leading
)または末尾(trailing
)であり、文字が取得される方向を示す。
Example:
> lists:seq($0,$9). "0123456789" > lists:seq($a,$z). "abcdefghijklmnopqrstuvwxyz" > string:take("abc0z123", lists:seq($a,$z)). {"abc","0z123"} > string:take("abc0z123", lists:seq($0,$9)). {[],"abc0z123"} > string:take("abc0z123", lists:seq($0,$9),false). {[],"abc0z123"} > string:take("abc0z123", lists:seq($0,$9),true). {"abc","0z123"} > string:take("abc0z123", lists:seq($0,$9),true,leading). {"abc","0z123"} > string:take("abc0z123", lists:seq($0,$9),true,trailing). {"abc0z123",[]} > string:take("abc0z123", lists:seq($0,$9),false,trailing). {"abc0z","123"}
titlecase/1 関数
titlecase(String :: unicode:chardata()) -> unicode:chardata()
文字列をタイトルケースに変換する。先頭の文字を大文字にする。
Example:
> string:titlecase("hello"). "Hello" > string:titlecase("HELLO"). "HELLO"
to_float/1 関数
to_float(String) -> {Float, Rest} | {error, Reason}
Types
String = unicode:chardata() Float = float() Rest = unicode:chardata() Reason = no_float | badarg
引数のStringは、floatで表される有効なテキストで始まることが期待される(数字はASCII値)。 float の後の文字列の残りの文字は、Restに返される。
Example:
> string:to_float("3.14159円周率"). {3.14159,"円周率"} > string:to_float("1.5cm"). {1.5,"cm"} > string:to_float("abcde"). {error,no_float} > string:to_float("-1.234e-5"). {-1.234e-5,[]} > string:to_float("-8.984E+8"). {-8.984e8,[]}
to_integer/1 関数
to_integer(String) -> {Int, Rest} | {error, Reason}
Types
String = unicode:chardata() Int = integer() Rest = unicode:chardata() Reason = no_integer | badarg
引数のStringは、整数で表される有効なテキストで始まることが期待される(数字はASCII値)。 整数の後の文字列の残りの文字は、Restに返される。
Example:
> string:to_integer("100"). {100,[]} > string:to_integer("-100"). {-100,[]} > string:to_integer("5 items"). {5," items"} > string:to_integer("-5.0cm"). {-5,".0cm"}
to_graphemes/1 関数
to_graphemes(String :: unicode:chardata()) -> [grapheme_cluster()]
文字列を書記素クラスタのリストに変換する。
Example:
$ erl Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false] Eshell V9.2 (abort with ^G) > string:to_graphemes("ß↑e̊"). [223,8593,[101,778]] > string:to_graphemes(<<"ß↑e̊"/utf8>>). [223,8593,[101,778]]
trim/1, trim/2, trim/3 関数
trim(String) -> unicode:chardata() trim(String, Dir) -> unicode:chardata() trim(String, Dir, Characters) -> unicode:chardata()
Types
String = unicode:chardata() Dir = direction() | both Characters = [grapheme_cluster()]
先頭(leading
)または末尾(trailing
)、あるいはその両方(both
)から Characters の文字が削除された String を返す。 Dirは、文字を削除する方向を示し、先頭(leading
)、末尾(trailing
)、またはその両方(both
)を指定できる。
Charactersのデフォルトは、Unicode Standard Annex#31でPattern_White_Spaceとして定義されている、分割できない空白(nonbreakable whitespace)のコードポイントの集合が使われる。 Dirのデフォルトは両方(both
)。
[$\r, $\n]
は、Unicode標準に準拠した書記素クラスタの1つである。
Example:
> string:trim(" Hello "). "Hello" > string:trim("\t Hello \n"). "Hello" > string:trim(<<"\t Hello \n">>). <<"Hello">> > string:trim(<<"\t Hello \n">>, leading). <<"Hello \n">> > string:trim(<<"\t Hello \n">>, trailing). <<"\t Hello">> > string:trim(<<". Hello .">>, trailing, "."). <<". Hello ">> > string:trim(<<". Hello .">>, leading, "."). <<" Hello .">> > string:trim(<<". Hello .">>, both, "."). <<" Hello ">> > string:trim(<<". Hello .">>, both, ".\s"). <<"Hello">>
uppercase/1 関数
uppercase(String :: unicode:chardata()) -> unicode:chardata()
String を大文字に変換する。
titlecase/1
も参照。
Example:
> string:uppercase("hello"). "HELLO" > string:uppercase("HELLO"). "HELLO" > string:uppercase("Hello"). "HELLO"
他の記事へ