無題の備忘録

IT技術について調べたことや学んだこと、試したこと記録するブログです。Erlang、ネットワーク、 セキュリティ、Linux関係のものが多いです。

Erlang の string モジュールを一通り試す - その3

OTP 20.0 で string モジュールに多くの関数が追加されていたのに、最近気がついた。一通り試そうと思う。

string モジュールのおさらいをしたい人は下記の記事へ

stacktrace.hatenablog.jp

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はデフォルトでleadingleadingは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"

他の記事へ

stacktrace.hatenablog.jp

stacktrace.hatenablog.jp

stacktrace.hatenablog.jp