文字列の一部分を別の文字列に置き換える

文字列の中の指定した部分を他の文字列で置き換えることができます。置き換える文字列を指定する方法がいくつか用意されています。ここでは Ruby で文字列の一部分を別の文字列に置き換える方法について解説します。

(2022 年 10 月 13 日公開 / 2022 年 10 月 25 日更新)

指定位置の文字を別の文字列に置き換える

指定の位置の文字を別の文字列に置き換える方法です。書式は次の通りです。

文字列[nth] = val

引数に指定した位置の文字を新しい文字列に置き換えます。位置は先頭文字が 0 文字目、次の文字が 1 文字目と数えていきます。文字の数なので半角でも全角でも同じように文字数で指定します。置き換える対象は 1 文字ですが、置き換える文字は複数の文字でも構いません。

具体的には次のように記述します。

str = "ABCDE"
str[1] = "X"
puts(str)  # AXCDE

str = "ABCDE"
str[1] = "XY"
puts(str)  # AXYCDE

1 番目の位置にある文字をそれぞれ "X" または "XY" に置き換えています。

開始位置と長さで指定した部分文字列を置き換える

指定した開始位置から指定した長さの文字列を別の文字列に置き換えます。

文字列[nth, len] = val

1 番目の引数に指定した位置から 2 番目の引数で指定した文字数分の文字列を新しい文字に置き換えます。位置は先頭文字が 0 文字目、次の文字が 1 文字目と数えていきます。文字の数なので半角でも全角でも同じように文字数で指定します。

具体的には次のように記述します。

str = "ABCDE"
str[1,3] = "XY"
puts(str)  # AXYE

1 番目の位置にある文字から 3 文字分を "XY" に置き換えています。

今度は全角文字の場合です。

str = "東京都千代田区"
str[1,3] = "花束"
puts(str)  # 東花束代田区

1 番目の位置にある文字から 3 文字分を "花束" に置き換えています。

開始と終了位置で指定した部分文字列を置き換える

開始位置と終了位置を指定した文字列を別の文字列に置き換えます。

文字列[first..last] = val

1 番目の引数に取得する文字の開始位置を指定します。先頭文字が 0 文字目、次の文字が 1 文字目と数えていきます。 2 番目の引数で終了位置を指定します。開始位置から終了位置までの部分文字列を新しい文字列に置き換えます。

具体的には次のように記述します。

str = "ABCDE"
str[2..3] = "XY"
puts(str)  # ABXYE

2 番目の位置にある文字から 3 番目の位置にある文字までを "XY" に置き換えています。

別の指定方法で開始と終了位置で指定した部分文字列を置き換える

開始位置と終了位置を指定して対象の文字列を指定しますが指定の方法が前回と異なります。

文字列[first...last] = val

開始位置と終了位置を指定しますが、最初の文字の左側が 0 の位置となり、最初の文字と 2 番目の文字の間が 1 の位置となります。そのため、例えば [0...1] と指定した場合は 0 番目と 1 番目の文字列ではなく、 0 番目と 1 番目の位置の間の文字列となります。

具体的には次のように記述します。

str = "ABCDE"
str[2...3] = "XY"
puts(str)  # ABXYDE

2 番目の位置と 3 番目の位置の間にある文字を "XY" に置き換えています。

サンプルコード

では簡単なサンプルで試してみます。

# encoding: UTF-8

str = "ABCDE"
puts("対象の文字列:" + str)

str[2,3] = "XY"
puts("str[2,3] = XY は " + str)

str = "ABCDE"
str[2..3] = "XY"
puts("str[2..3] = XY は " + str)

str = "ABCDE"
str[2...3] = "XY"
puts("str[2...3] = XY は " + str)

実行結果は次のようになります。

文字列の部分文字列を置き換える

-- --

Ruby で文字列の一部分を別の文字列に置き換える方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。