読者です 読者をやめる 読者になる 読者になる

string

Erlang

 stringモジュールの練習。

len(String) -> Length

> string:len("spam").
4

equal(String1, String2) -> bool()

> string:equal("spam", "spam")
true
> string:equal("spam", "egg")
false

む、なぜ、わざわざequalを使うんでしょうか?Javaと同じ理由?

chr(String, Character) -> Index

Characterが最初に出現するIndexを取得。

> string:chr("spam", $a). 
3

rchr(String, Character) -> Index

chrの逆。

> string:rchr("spam spam egg", $a).
8

str(String, SubString) -> Index

SubStringが最初に出現するIndexを取得。

> string:str("spam spam egg", "egg").
11

rstr(String, SubString) -> Index

strの逆。

> string:rstr("spam spam egg", "spam").
6

span(String, Chars) -> Length

cspan(String, Chars) -> Length

よく分からない。

substr(String, Start) -> SubString

substr(String, Start, Length) -> SubString

> string:substr("spam egg", 6, 3).
"egg"
> string:substr("spam egg", -3).
=ERROR REPORT==== 30-Apr-2007::23:54:22 ===
Error in process <0.80.0> with exit value: {function_clause,[{string,substr,["spam egg",-3]},{erl_eval,do_apply,5},{shell,exprs,6},{shell,eval_loop,3}]}

** exited: {function_clause,[{string,substr,["spam egg",-3]},
                             {erl_eval,do_apply,5},
                             {shell,exprs,6},
                             {shell,eval_loop,3}]} **


 Startに負の数を与えると例外が発生するようですね。この当たりは、Python, PHPは便利です。

>>> "spam egg"[-3:]
'egg'

tokens(String, SeparatorList) -> Tokens

SeparatorListの文字でStringを分割。

> string:tokens("spam egg\nham egg", " \n").
["spam","egg","ham","egg"]

chars(Character, Number) -> String

CharacterをNumber回繰り返した文字列を返す。

> string:chars($s, 10). 
"ssssssssss"

chars(Character, Number, Tail) -> String

CharacterをNumber回繰り返し、Tailで終わるリストを返す。

> string:chars($s, 10, $m).
[115,115,115,115,115,115,115,115,115,115|109]

どういう局面で使うんだろう?ある文字を繰り返して、最後に\nで終わる場合とか??

copies(String, Number) -> Copies

StringをNumber回繰り返した文字列を返す。

string:copies("spam", 2).
"spamspam"

words(String) -> Count

空白文字で分割した際の、単語数を返す。

> string:words("spam egg ham").
3

words(String, Character) -> Count

Characterで分割した際の単語数を返す。

> string:words("spamspamspam", $a).
4

sub_word(String, Number) -> Word

空白文字で文字列を分割した際に、Number番目の単語を返す。Numberは1以上の整数でなくてはならない。

> string:sub_word("spam egg ham", 1).
"spam"
> string:sub_word("spam egg ham", 2).
"egg"
> string:sub_word("spam egg ham", 3).
"ham"

Numberに該当する単語がなければ、空のリストを返す。

string:sub_word("spam egg ham", 100).
[]

sub_word(String, Number, Character) -> Word

> string:sub_word("spam egg ham", 1, $a).
"sp"
> string:sub_word("spam egg ham", 2, $a).
"m egg h"

strip(String) -> Stripped

写経している最中に、これに相当する関数を自分で書いている事例に出会ったのですが、当然、標準ライブラリにありますよね。

> string:strip("   spam    ").
"spam"

strip(String, Direction) -> Stripped

> string:strip("   spam    ", left).
"spam    "
> string:strip("   spam    ", right).
"   spam"

strip(String, Direction, Character) -> Stripped

string:strip(String, Direction)と似ていますが、Characterに指定した文字だけを除去します。

> string:strip("\n spam  \n", right, $\n).
"\n spam  "
> string:strip("\n spam  \n", left, $\n). 
" spam  \n"

left(String, Number) -> Left

文字列Stringを長さNumberに。必要に応じて切り詰め、もしくは、スペースで埋める。

> string:left("spam", 10).
"spam      "
> string:left("spam", 2). 
"sp"

left(String, Number, Character) -> Left

left(String, Number)と同じですが、足りない場合はCharacterで穴埋め。地味に便利そう。

> string:left("spam", 10, $.).
"spam......"

right(String, Number) -> Right

string:leftの右埋め版。

> string:right("spam", 10).    
"      spam"

right(String, Number, Character) -> Right

> string:right("spam", 10, $.).
"......spam"

centre(String, Number) -> Centered

> string:centre("spam", 10). 
"   spam   "

centre(String, Number, Character) -> Centered

> string:centre("spam", 10, $.).
"...spam..."

sub_string(String, Start) -> SubString

string:substrと同じ?

> string:sub_string("spam egg ham", 6).
"egg ham"

sub_string(String, Start, Stop) -> SubString

string:substrと違って、終端のインデックスを指定する。

> string:sub_string("spam egg ham", 6, 8).
"egg"

to_float(String) -> {Float,Rest} | {error,Reason}

文字列をfloatに。"1"は駄目っぽい。

> string:to_float("1").
{error,no_float}
> string:to_float("1.0").
{1.00000,[]}
> string:to_float("spam").
{error,no_float}

to_integer(String) -> {Int,Rest} | {error,Reason}

文字列をintegerに。

string:to_integer("1").
{1,[]}
> string:to_integer("1.0").
{1,".0"}
> string:to_integer("spam").
{error,no_integer}

to_lower(String) -> Result

> string:to_lower("SPAM").  
"spam"

to_lower(Char) -> CharResult

> string:to_lower($S).    
115

to_upper(String) -> Result

> string:to_upper("spam").
"SPAM"

to_upper(Char) -> CharResult

> string:to_upper($s).    
83