標準クラス・モジュール > String > []=
[]=
メソッドは、str[idx] = new_str
のように記述することで、[]
内で指定した部分文字列を右辺の文字列で置き換えます。strがレシーバで、[]
内のindexと右辺のnew_strが引数です。レシーバ自身を変更するメソッドです。戻り値は常に右辺のnew_strです。
[]
メソッドと同じく、[]
内には位置だけでなく、位置と数、範囲、正規表現、文字列を指定できます。詳しくは[]
メソッドをご覧ください。
部分文字列が見つからない場合は例外IndexError
が発生します。
Ruby 1.9 位置、数、範囲はRuby 1.8ではバイト単位、Ruby 1.9では文字単位になります。
str[idx] = new_str
[]
内に整数idxを1つ指定して、右辺に文字列new_strを置くと、idxの位置の文字をnew_strで置き換えます。
s = "hello" s[4] = "oooo" # 5文字目を置換 puts s
helloooo
str[idx] = integer
Ruby 1.8では、右辺に整数integerを置くと、idxの位置のバイトをintegerで置き換えます。
s = "hello" s[1] = 0x61 # 2文字目をaに置換 puts s
hallo
Ruby 1.9 Ruby 1.9では、[]=
の右辺に整数は指定できなくなりました。位置を指定してバイトを変更したいときはsetbyte
メソッドを使います。
str[idx, len] = new_str
[]
内に整数を2つ指定すると、idxの位置からlen文字分の部分文字列を右辺のnew_strで置き換えます。
s = "hello" s[1, 3] = "ipp" # 2文字目から3文字分を置換 puts s
hippo
str[range] = new_str
[]
内に範囲を指定すると、その範囲に対応する部分文字列を右辺のnew_strで置き換えます。
s = "hello, world" s[7..11] = "sekai" # 8文字目から12文字目まで置換 puts s
hello, sekai
str[regexp] = new_str
[]
内に正規表現を指定すると、そのパターンに最初にマッチした部分文字列を右辺のnew_strで置き換えます。
s = "hello, world" s[/\w+/] = "morning" # 最初の単語を置換 puts s
morning, world
str[regexp, num] = new_str
[]
内に正規表現と整数を指定すると、0のときはマッチした部分、1のときはパターン中の最初の( )
の部分、2のときは2つ目の( )
の部分、...を右辺のnew_strで置き換えます。
s = "hello, world" s[/(\w+)\W+(\w+)/, 2] = "sekai" # 2つ目の()を置換 puts s
hello, sekai
str[other_str] = new_str
[]
内に文字列を指定すると、部分文字列other_strを右辺のnew_strで置き換えます。同じ部分文字列が複数あるときは、最初のものだけ置き換わります。
s = "hello, hello, world" s["hello"] = "hi" # 最初の"hello"を置換 puts s
hi, hello, world