Ruby基礎復習(2) Stringクラス
パーフェクトRuby p.148から学習。文字列ことStringクラス。
まずは基本操作系。
1s = "hoge"
2s.empty? # => false
3s.length # => 4
4s.size # => 4
5s.bitesize # => 8
6s.include?("og") => true
演算子での操作。
1'hoge' + 'fuga' # => 'hogefuga'
2'hoge' * 3 => 'hogehogehoge'
破壊的な文字列の追加。
1s = "hoge"
2s << "fuga" # => "hogefuga"
3s.concat("piyo") # => "hogefugapiyo"
切り出し。
1s = "hogefuga"
2s.slice(3) # => "e"
3s.slice(2,5) # => "gefu"
4s.slice(-4,2) # => "fu"
5s.slice(2..5) # => "gefu"
#slice
を使わず、以下記法でも同等。
1s = "hogefuga"
2s[3] # => "e"
3s[2,5] # => "gefu"
4s[-4,2] # => "fu"
5s[2..5] # => "gefu"
6s[//]
文字列の整形に関するメソッドいろいろ。特に#chop
と#chomp
とか紛らわしいとよく言われる。英単語の意味するところとしてchop=刻むってことで1文字削除されるのはわかるが、そこにmが足されると改行コードの削除になるのはなぜなんだろう。。。あと#squeeze
なんかは使う場面がいまいち想像できない。
なお、ここにあるメソッドはすべて非破壊的。末尾に!
を付けることで破壊的操作になる。
1s = " aaa "
2s.strip # => "aaa"
3s.rstrip # => " aaa"
4s.lstrip # => "aaa "
5
6s = "aaa\n\n"
7s.chomp # => "aaa\n"
8s = "abcd"
9s.chop # => "abc"
10
11s = "aaaabbbbcccc"
12s.squeeze # => "abc"
13s.squeeze('ab') # => "abccc"
14
15"ABC".downcase # => "abc"
16"def".upcase # => "DEF"
17"Abc".swapcase # => "aBC"
18"tITle".capitalize # => "Title"
19
20"abc".reverse # => "cba"
置換。第一引数で検索を行い、ヒットした箇所を第二引数で置換するか、あるいはブロックに引き渡して操作、という建て付けのよう。#sub
だと最初に一致したもののみ、#gsub
だとヒットしたすべての箇所が置換される。これも破壊的、非破壊的の2種類あり。
1"aaaa".sub("a","b") # => "baaa"
2"24-1-365".gsub(/[0-9]+/) {|str| str.to_i.succ} # => 25-2-366
配列への変換。#split
で第一引数に指定した文字をセパレータとした分割が可能。第二引数には分割最大数が指定できる。また1文字ずつ操作したい場合は#each_char
が使える。ブロックへの引き渡しも可能。似たところで#each_byte
もある。
1str = "Alice, Bob, Charlie"
2
3str.split(",") # => ["Alice", "Bob", "Charlie"]
4"Alice".each_char.to_a # => ["A","l","i","c","e"]