Stringには、文字列を操作するためのメソッドがいくつか用意されています。これらのメソッドは文字列自体に対して呼び出し、1つの文字列に複数の操作を行うために連結して使われることがよくあります。
以下は、特によく使われるメソッドの一部の一覧です。メソッドの完全な一覧については、StringのAPIドキュメントを参照してください。
upcaseメソッドは、すべての文字を大文字に変換した新しい文字列を返します。
"hello".upcase
# => "HELLO"
downcaseメソッドは、すべての文字を小文字に変換した新しい文字列を返します。
"HELLO".downcase
# => "hello"
Crystalには、文字列の一部を置き換えるためのメソッドがあります。これらはsub(substitution、置換)とgsub(global substitution、全体置換)と呼ばれます。
これらのメソッドは、第1引数に文字列、文字、または正規表現を、第2引数に文字列または文字を取ることができます。第1引数は置き換えられる文字列の一部で、第2引数は置き換え後の値です。Charと正規表現については、後のコンセプトで説明します。
subメソッドは、第1引数が最初に現れる箇所を第2引数で置き換えます。
"hello".sub("l", "r")
# => "herlo"
gsubメソッドはsubと同じように動作しますが、第1引数が現れるすべての箇所を第2引数で置き換えます。
"hello".gsub("l", "r")
# => "herro"
chompとstripを使うと、文字列から不要な文字を削除できます。
chompメソッドは、デフォルトで文字列の末尾から\r、\n、または\r\nを削除します。このメソッドを引数付きで呼び出すと、指定した値を文字列の末尾から削除します。ただし、その値が文字列の末尾に存在する場合に限ります。
"hello\n".chomp
# => "hello"
"hello".chomp("llo")
# => "he"
デフォルトでは、stripメソッドは文字列の先頭と末尾からすべての空白を削除します。このメソッドを引数付きで呼び出すと、その引数を文字列の先頭と末尾から削除します。ただし、その値が文字列の先頭または末尾に存在する場合に限ります。
" hello ".strip
# => "hello"
indexメソッドを使うと、文字列内での文字のインデックスを調べることができます。indexメソッドは、引数にString、Char、または正規表現を取ります。省略可能な第2引数で、検索を開始するインデックスを指定できます。indexメソッドは、引数が最初に現れる位置のインデックスを返します。
"hello".index("l")
# => 2
"hello".index("l", 3)
# => 3
delete_atメソッドを使うと、文字列から1文字を削除できます。delete_atメソッドは引数にインデックスを取り、そのインデックスにある文字を削除します。
"hello".delete_at(0)
# => "ello"
"hello".delete_at(3)
# => "helo"
insertメソッドを使うと、特定のインデックスに文字列を挿入できます。insertメソッドは、第1引数にインデックスを、第2引数に文字列を取ります。insertメソッドは、第2引数をそのインデックスに挿入した新しい文字列を返します。
"hello".insert(0, "h")
# => "hhello"
"hello".insert(3, "l")
# => "helllo"
この演習では、高校時代の恋人同士がSNSで愛を告白できるよう手伝います。二人のイニシャルを使ったASCIIのハートを生成しましょう。
❤ J. + M. ❤
HighSchoolSweetheart.clean_up_nameメソッドを実装します。
名前を受け取り、その中の-をすべて取り除いてスペースに置き換えます。
名前の先頭と末尾にある空白も取り除きます。
HighSchoolSweetheart.clean_up_name("Jane-Ann")
# => "Jane Ann"
HighSchoolSweetheart.first_letterメソッドを実装します。
名前を受け取り、その最初の文字を返します。
前のステップで定義したHighSchoolSweetheart.clean_up_nameを必ず再利用してください。
HighSchoolSweetheart.first_letter("Jane")
# => "J"
HighSchoolSweetheart.initialメソッドを実装します。
名前を受け取り、その最初の文字を大文字にし、その後にドットを付けて返します。
前のステップで定義したHighSchoolSweetheart.first_letterを必ず再利用してください。
HighSchoolSweetheart.initial("Robert")
# => "R."
HighSchoolSweetheart.pairメソッドを実装します。
2つの名前を受け取り、イニシャルを絵文字のハートで挟んだものを返します。
前のステップで定義したHighSchoolSweetheart.initialを必ず再利用してください。
HighSchoolSweetheart.pair("Blake Miller", "Riley Lewis")
# => "❤ B. + R. ❤"