最終更新:2010-08-09 (月) 04:03:24 (4981d)
Ruby/String
Object>String
基本
- p は変数の状態を出力するメソッド。
- 正規表現の結果は$~とかに入ってくる。
四則演算
#+ 文字列の結合。 str2 = str0 + str1 p str2 #=> "abcdef" #コレと同義 str2= str0.concat(str1) #文字列の連結 #*で繰り返し str = "abc" p str * 4 #=> "abcabcabcabc" #% 文字列のフォーマット(sprintfみたいな感じ) p "%#x" % 10 # => "0xa" p "%#x,%#o" % [10, 10] # => "0xa,012
文字列比較
- 変数 $= の値が真である時、比較はアルファベットの大文字小文字を無視して行われる。デフォルトはnil
- $=は比較の情報を保持するグローバル変数
str1 == str2 str1 > str2 str1 >= str2 str1 < str2 str1 <= str2 str.casecmp #アルファベットの大文字小文字の違いを無視して比較。 p 'a' <=> 'A' #=> 1 p 'a'.casecmp('A') #=> 0
部分文字列
str[n] #nバイト目(先頭は0) str[n,m] #nバイト目からmバイト str[first..last] #firstからlastバイト目まで 'abcd'[ 2 .. 3] # => "cd" str[first...last] #firstとlastバイトの隙間にあるバイト 'abcd'[ 2 ... 3] # => "c" str[substr] #substrにマッチする最初の部分文字列を返す。 substr = "bar" result = "foobar"[substr] #一致した文字列を新しく作って返す。substrには正規表現もいける。 p result # => "bar" #要は同じことだけど str[regexp] #regexp にマッチする最初の部分文字列を返す。 str[regexp, nth] #regexp にマッチするnth番目の部分文字列を返す。 p "foobar"[/bar/] # => "bar" p $~.begin(0) # => 3 #第2引数に数字を指定すると括弧にマッチした奴を取得できる。 p "def getcnt(line)"[ /def\s*(\w+)/, 1 ] # => "getcnt" str.slice(nth[, len]) #上のと同じ。 str.slice(substr) str.slice(first..last) str.slice(first...last) str.slice(regexp[, nth])
文字列の複製
str.clone # 同じ内容を持つ新しい文字列を返す。フリーズされた文字列を返す str.dup # 同じ内容を持つ新しい文字列を返す。Srting#newと等価 str.clear #文字列の内容を削除して空にする str.replace(other) #文字列の内容を other の内容で置き換えます。 s = "foo" id = s.id s.replace "bar" p s # => "bar" p id == s.id # => true
文字列の検索
str.include?(substr) #strにsubstrが含まれるかどうか(bool) str.index(pattern[, pos]) #部分文字列の探索を左端から右端に向かって行い、部分文字列の左端の位置を返す #pos が負の場合、文字列の末尾から数えた位置から探索。 p "foobarfoobar".index("bar", 6) # => 9 p "foobarfoobar".index("bar", -6) # => 9 rindex(pattern[, pos]) #部分文字列の探索を右端から左端に向かって行います # String#index の場合 p "foobar".index("bar", 2) # => 3 # bar <- ここから探索を行う # bar <- 右にずらしてここで見つかる # String#rindex の場合 p "foobar".rindex("bar", -2) # => 3 # bar <- ここ(右端が末尾から 2 番目)ではなく # bar <- ここから探索を行う(左端が末尾から2番目) # bar <- 左にずらしてここで見つかる
置換
str[substr]=val #最初に一致した部分をvalで置換 str.match(regexp[, pos]) #regexp.match(self[, pos]) と同じ str.sub(pattern, replace) #pattern にマッチする部分全てを replace で置き換える。(最初のみ) str.sub!(pattern, replace) #(元の変数を操作) str.gsub(pattern, replace) #pattern にマッチする部分全てを replace で置き換えます。 str.gsub!(pattern, replace) #(元の変数を操作) p 'abcabc'.gsub(/b/, '(\&)') #=> "a(b)ca(b)c" p 'abcabc'.gsub(/b/) {|s| s.upcase } #=> "aBcaBc" p 'abcabc'.gsub(/b/) { $&.upcase } #=> "aBcaBc" str.tr(search, replace) #search を replace 文字列の対応する文字に置き換える。 str.tr!(search, replace) #(元の変数を操作) p "foo".tr('a-z', 'A-Z') => "FOO" str.tr_s(search, replace) #同一の文字の並びがあったらそれを 1 文字に圧縮します。 str.tr_s!(search, replace) #(元の変数を操作) p "foo".tr_s('a-z', 'A-Z') => "FO" str.squeeze(str1) #str1 に含まれる同一の文字の並びをひとつにまとめます。 p "112233445566778899".squeeze =>"123456789" str.delete(str1[, str2[, ... ]]) #文字列から str1 に含まれる文字を取り除く。引数はtr(1)形式 p "123456789".delete("2-8", "^4-6") #=> "14569" p "123456789".delete("2378") #=> "14569" insert(nth, other) #文字列の挿入 #str[nth, 0] = otherと同値
文字列の長さとか
str.length #文字列のバイト数を返します。 str.size #同上 str.count() # 文字列中の文字の数を返す。引数はtr(1)形式 p 'abcdefg'.count('c') # => 1 p '123456789'.count('2378') # => 4 p '123456789'.count('2-8', '^4-6') # => 4
大文字小文字の変換
str.upcase #大文字に str.upcase! #(元の変数を操作) str.downcase #小文字に str.downcase! #(元の変数を操作) str.swapcase #大文字小文字反転 str.swapcase! #(元の変数を操作) str.capitalize #先頭を大文字に、その他を小文字に str.capitalize! #先頭を大文字に、その他を小文字に(元の変数を操作)
文字列の整形
str.center(width) #width文字の中で中央寄せする str.ljust(width) #width文字の中で左寄せする str.rjust(width) #width文字の中で右寄せする str.reverse #文字列をひっくり返す。 str.reverse! #(元の変数を操作)
改行コードとかの処理
str.strip #先頭と末尾の空白文字を全て取り除きます。 str.strip! #(元の変数を操作) str.lstrip #先頭の空白文字を取り除く。 str.lstrip! #(元の変数を操作) str.rstrip #末尾の空白文字を取り除く。 str.rstrip! #(元の変数を操作) str.chop #文字列の最後の文字を取り除く(終端が"\r\n"であれば2文字取り除く) str.chop! #(元の変数を操作) str.chomp([rs]) #文字列の末尾から rs で指定する行区切りを取り除く。(改行を取り除く) str.chomp!([rs]) #(元の変数を操作) str.dump #制御文字をエスケープ puts "abc\r\n\f\x00\b10\\\"".dump #=> "abc\r\n\f\000\01010\\\""
配列処理
str.split([separater[, limit]]) #separaterで分割して配列に格納 str.scan(regexp) #正規表現 regexpで繰り返しマッチを行い、マッチした部分文字列の配列を返します p "foobarbazfoobarbaz".scan(/ba./) # => ["bar", "baz", "bar", "baz"] str.unpack
ループ処理とか
str.each #文字列中の各行に対して繰り返す str.each_line #同上 str.each_byte #文字列中の各文字に対して繰り返す str.next #次の文字列を返します。 str.next! #(元の変数を操作) str.succ #次の文字列を返します。 str.succ! #(元の変数を操作) p "aa".succ # => "ab" p "99".succ # => "100" p "a9".succ # => "b0" p "Az".succ # => "Ba" #a, b, c, ... z,aa, ... az, ..., za を出力します。 ("a" .. "za").each do |str| puts str end
型変換
str.to_i #integerに変換 str.to_f #floatに変換 str.hex #16進に変換 str.oct #8進に変換 str.sum #チェックサムを計算 str.to_s #自分自身を返す str.to_str #自分自身を返す str.intern #文字列に対応するシンボル値(Symbol)を返します。 str.to_sym #同上 p "foo".intern.to_s == "foo" => true
その他
str.crypt(salt) #saltでstrを暗号化 hoge =~ regexp #regexpにマッチするか #組み込み変数 $~ にマッチに関する情報が設定される。