文字列の一部を切り出そう
配列と同じように、文字列でも範囲指定で一部を切り出すことができます。このレッスンでは、文字列の部分取得を学びます。
配列の範囲取得の復習
Ruby 入門コースでは、配列から複数の要素を取得する方法を学びました。範囲オブジェクトや開始位置と長さを使って、配列の一部を取り出せることを覚えているでしょうか。
numbers = [10, 20, 30, 40, 50] p numbers[1..3] # => [20, 30, 40] p numbers[1, 3] # => [20, 30, 40]
実は、文字列でも同じ方法で一部を切り出すことができます。
文字列の一部を取り出す
文字列も配列と同様に、各文字にインデックスが割り振られています。
text = "Hello" # 01234
配列と同じ構文で、文字列の一部を取り出せます。
text = "Hello" puts text[0] # => H puts text[1] # => e puts text[4] # => o
範囲オブジェクトで切り出す
終端を含む範囲(..)
..(ドット2つ)を使うと、終端を含む範囲で文字列を切り出せます。
text = "Hello, Ruby!" # 0123456789.. puts text[0..4] # => Hello(インデックス 0 から 4 まで) puts text[7..10] # => Ruby(インデックス 7 から 10 まで)
終端を含まない範囲(...)
...(ドット3つ)を使うと、終端を含まない範囲で文字列を切り出せます。
text = "Hello, Ruby!" # 0123456789.. puts text[0...5] # => Hello(インデックス 0 から 5 の手前まで) puts text[7...11] # => Ruby(インデックス 7 から 11 の手前まで)
.. と ... の違いを意識して使い分けましょう。
開始位置と長さで切り出す
範囲オブジェクトの代わりに、開始位置と取得する文字数を指定する方法もあります。
text = "Hello, Ruby!" # 0123456789.. puts text[0, 5] # => Hello(インデックス 0 から 5 文字) puts text[7, 4] # => Ruby(インデックス 7 から 4 文字)
取得したい文字数が明確なときは、この方法が便利です。
負のインデックスとの組み合わせ
文字列でも負のインデックスを使えます。-1 は最後の文字、-2 は最後から2番目の文字を表します。
text = "Hello, Ruby!" puts text[-1] # => ! puts text[-5] # => R
範囲オブジェクトと負のインデックスを組み合わせると、末尾を基準にした柔軟な切り出しができます。
text = "Hello, Ruby!" puts text[-5..-2] # => Ruby(末尾から5番目から末尾から2番目まで) puts text[0..-2] # => Hello, Ruby(最後の1文字を除く)
開始位置と長さの指定でも、負のインデックスを使えます。
text = "Hello, Ruby!" puts text[-5, 4] # => Ruby(末尾から5番目から 4 文字)
まとめ
- 文字列でも配列と同じ方法で一部を切り出せる
文字列[開始..終了]で終端を含む範囲を切り出せる文字列[開始...終了]で終端を含まない範囲を切り出せる文字列[開始, 長さ]で開始位置から指定した文字数を切り出せる- 負のインデックスを使うと、末尾を基準にした切り出しができる
演習に挑戦