[ruby-list:46556] Re: 質問:最も簡単かつ短い記述で文字列中から文字列を削除する方法は?

From: 長尾 賢志 <gao@...>
Date: 2009-11-15 11:45:49 UTC
List: ruby-list #46556
お返事ありがとうございます。

> #||の記法がよくわかりませんが…
>   
書いてないのに送信して、その後自分に届いたメールから入ってました(汗
とりあえず後で原因調べてみます。申し訳ないです。
> subはsubstitute(置換)の略だと思いますが、デフォルト値を空文字列にする
> 意味がよくわかりません。「AをBに置換する」ならわかりますが、「Aを置換す
> る」では「何を置換するの?」となりますね。
>   
「replace引数は指定していないんだからデフォルトで空を指定したことにす
る」で自然かなと思ったわけです。
ただ、他の言語(今ざっとJava, .NET, JavaScriptのString型見てみました)でも、
どれもreplaceメソッドは第2引数は省略できない(JavaScriptは強引にできない
ことはないが"ABUnknownAD"となる・・)ので、私の発想が間違っている可能性が
高いですね。。

subやgsubでは不自然でも、deleteではなくて他のメソッド(例えばremoveなど)
で“文字列を”取り除くなどのメソッドがrubyにあるのではないかと期待していた
わけです。

例:"ABACAD".remove("AC") -> "ABAD"

rubyなんだから「削除する」処理を書くのに「置換する」メソッドなんて使用し
なくてもいいのではないかと思ったわけです。
それともrubyに対して何か誤解しているのかな・・

> 破壊的になりますが String#[]= や String#slice! が使えます。
> ただ、あまり使われていないようなので、素直にgsubでいいと思います。
>
> s = "ABACAD"
> s['AC']=""               # => ""
> s                        # => "ABAD"
>   
この書き方がありましたね!
、とはいっても、
"ABACAD"['AC'] = ''
はOKでも
"ABAZAD"['AC'] = ''
と、マッチする部分が無かった場合にはエラーとなってしまうので、使える箇所
は限定されそうですね。


なんだか電光石火で解決されてしまったようです。
ありがとうございました。

結論!?:「文字列中の文字列を削除するには素直にString#gsubかString#sub
を使用すべき」


一応、「いやいや他にこういう便利なメソッドがあるよ」という意見が出てくる
かもしれないかすかな希望を抱いておきますので、どなたか情報あればお願いし
ます。



In This Thread

Prev Next