Stringのdeleteメソッドの動作規則が分かりません。
"hello".delete("l", "lo")とした場合、「heo」となります。
"hello".delete("l", "o")とした場合、「hello」となります。
私が動かして確認してみた結果、引数で指定された文字列中の重複する文字だけが削除されるという認識になりました。
これは正しいでしょうか?
また、何のため第二引数以降を指定するのでしょうか?
第一引数に削除したい文字をすべて指定すればいいのではと思います。
私が動かして確認してみた結果、引数で指定された文字列中の重複する文字だけが削除されるという認識になりました。
これは正しいでしょうか?
ある意味、正しいです。
ruby のドキュメントからの引用です。
http://doc.ruby-lang.org/ja/1.9.3/class/String.html
なお、引数を複数指定した場合は、すべての引数にマッチする文字だけが削除されます。
「ある意味」と書いたのは、"^" の表現があるからです。
また、何のため第二引数以降を指定するのでしょうか?
引数がひとつだけだと、表現できないケースがあります。
"^0-9" のように文字列の先頭が `^' の場合は指定文字以外を意味します。
delete の引数を定数で指定できない場合(プログラムの結果で導き出される)で、且つ、ひとつは "^" を指定したくなる場合。
例えば、5よりも大きくて、素数では無い数字を削除したい場合、素直に表現すると以下のようになります。
str.delete("5-9", "^2357")
ふたつの条件から、"5689" という文字列を作って、
str.delete("5689")
としても同じことですが、その文字列を作る手間を delete に任せることができます。
私が動かして確認してみた結果、引数で指定された文字列中の重複する文字だけが削除されるという認識になりました。
これは正しいでしょうか?
ある意味、正しいです。
ruby のドキュメントからの引用です。
http://doc.ruby-lang.org/ja/1.9.3/class/String.html
なお、引数を複数指定した場合は、すべての引数にマッチする文字だけが削除されます。
「ある意味」と書いたのは、"^" の表現があるからです。
また、何のため第二引数以降を指定するのでしょうか?
引数がひとつだけだと、表現できないケースがあります。
"^0-9" のように文字列の先頭が `^' の場合は指定文字以外を意味します。
delete の引数を定数で指定できない場合(プログラムの結果で導き出される)で、且つ、ひとつは "^" を指定したくなる場合。
例えば、5よりも大きくて、素数では無い数字を削除したい場合、素直に表現すると以下のようになります。
str.delete("5-9", "^2357")
ふたつの条件から、"5689" という文字列を作って、
str.delete("5689")
としても同じことですが、その文字列を作る手間を delete に任せることができます。
引数が複数ある場合はいずれにもマッチする文字が削除対象となりますので、
"hello".delete("l", "lo") であれば、
どちらにも含まれている"l"が削除対象となり結果は"heo"となりますが、
"hello".delete("l", "o") には、同じ文字が含まれていないため、
削除対象となる文字が無く結果は"hello"のままとなるわけです
一部正しいのですが、少しだけ勘違いがあります。
str.delete の第一引数に"lo"を指定した場合には、l もしくは o と解釈されます。
引数を複数指定した場合、各引数は∩(かつ)の関係で解釈されます。
つまり、
"hello".delete("lo") -> l か o を削除 -> he
"hello".delete("l", "lo") -> l かつ l か o -> heo(lかつlのみ削除)
"hello".delete("l", "o") -> l かつ o -> hello(該当なし)
となります。
もしも特定の文字列(lo、lloなど)を削除した場合には、delete ではなく、subか
gsubを使用された方がよいかと思います。
$test = "hello".sub("lo", "") -> hel(loを何もなしに置換)
$test = "hello".sub("l", "") -> helo(最初のlのみ何もなしに置換)
$test = "hello".gsub("l", "") -> heo(すべてのlを何もなしに置換)
sub と gsub の違いは「最初にマッチしたものだけ置換するか、すべてを置換するか」です。
コメント(0件)