文字列から指定した範囲の部分文字列を取得する

文字列に対して開始位置と長さを指定して文字列の一部を取得することができます。ここでは Ruby で文字列から指定した範囲の部分文字列を取得する方法について解説します。

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

指定の位置から指定の長さの文字列を取得する

文字列に対して指定した開始位置から指定した長さの文字列を新しい文字列として取得します。書式は次の通りです。

文字列[nth, len]

1 番目の引数に取得する文字の開始位置を指定します。先頭文字が 0 文字目、次の文字が 1 文字目と数えていきます。 2 番目の引数で取得する文字の長さを文字数で指定します。どちらも文字単位なので半角でも全角でも同じ扱いとなります。

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

str1 = "ABCDE"
puts(str1[1, 3])  # BCD

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

指定した位置から指定した文字数の分だけの新しい文字列を取得しています。

なお String クラスの slice メソッドでも同じ処理を行うことができます。

slice(nth, len)

1 番目の引数に開始位置、 2 番目の引数に文字数を指定して部分文字列を取得します。指定方法は先ほどと同じです。

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

str1 = "ABCDE"
puts(str1.slice(1, 3))  # BCD

str2 = "東京都千代田区"
puts(str2.slice(1, 3))  # 京都千

指定した位置から指定した文字数の分だけの新しい文字列を取得しています。

指定の開始位置と終了位置の文字列を取得する

開始位置と終了位置を指定して文字列を取得します。

文字列[first..last]

1 番目の引数に取得する文字の開始位置を指定します。先頭文字が 0 文字目、次の文字が 1 文字目と数えていきます。 2 番目の引数で終了位置を指定します。どちらも文字単位なので半角でも全角でも同じ扱いとなります。

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

str1 = "ABCDE"
puts(str1[2..3])  # CD

str2 = "東京都千代田区"
puts(str2[2..3])  # 都千

指定した開始位置から指定した終了位置までの新しい文字列を取得しています。

なお String クラスの slice メソッドでも同じ処理を行うことができます。

slice(nth..len)

1 番目の引数に開始位置、 2 番目の引数に終了位置を指定して部分文字列を取得します。指定方法は先ほどと同じです。

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

str1 = "ABCDE"
puts(str1.slice(2..3))  # CD

str2 = "東京都千代田区"
puts(str2.slice(2..3))  # 都千

指定した開始位置から指定した終了位置までの新しい文字列を取得しています。

別の方法で指定の開始位置と終了位置の文字列を取得する

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

文字列[first...last]

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

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

str1 = "ABCDE"
puts(str1[2...3])  # C

str2 = "東京都千代田区"
puts(str2[2...3])  # 都

指定した開始位置から指定した終了位置までの間にある新しい文字列を取得しています。

なお String クラスの slice メソッドでも同じ処理を行うことができます。

slice(nth...len)

1 番目の引数に開始位置、 2 番目の引数に終了位置を指定して部分文字列を取得します。指定方法は先ほどと同じです。

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

str1 = "ABCDE"
puts(str1.slice(2...3))  # C

str2 = "東京都千代田区"
puts(str2.slice(2...3))  # 都

指定した開始位置から指定した終了位置までの新しい文字列を取得しています。

サンプルコード

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

LibraryString5.rb

# encoding: UTF-8

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

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

puts()

str = "東京都千代田区"
puts("対象の文字列:" + str)

puts("str[2,4]は " + str[2,4])
puts("str[2..4]は " + str[2..4])
puts("str[2...4]は " + str[2...4])

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

文字列の部分文字列を取得

-- --

Ruby で文字列から指定した範囲の部分文字列を取得する方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。