rubyの文字列について
スピーカー ひがきまさる
- リテラル
- エンコーディング
- 順序
- 比較
- 数え上げ
- mutable
文字列の作りかた
String.new # => "" String.new("ruby") # => "ruby"
1.to_s # => "1" [1, 2, 3].to_s # => "[1, 2, 3]" "Ruby関西" # => "Ruby関西" '文字列に"を含む' # => "文字列に \" を含む" %|' も " も含む| # => "' も " も 含む"
式展開
"#{name}さん(#{age})" '#{name}さん(#{age})"
シングルクォートは"とかも文字列として見做す
エンコーディング
# -*- conding: utf-8; -*- e = s.encode(Endoding::EUC_JP) e.encoding
文字列はそれぞれエンコードを持っている
そしてencodingメソッドでエンコードで指定出来る。
また、1行目でエンコードを指定しないといけない
Encoding.listでエンコードを羅列できる
また、外部エンコーディングと内部エンコーディングが存在する
__ENCODING__ スクリプトのエンコーディング
順序
["Ruby", "Java", "C", "Lisp"].sort "a".succ.succ # => "c" "z".succ # => "aa" "Ruby".succ # => "Rubz"
比較
# true "Ruby" == "Ruby" "Ruby" === "Ruby" # 真偽値判定メソッドは?をつけることが多い "Ruby".eql? "Ruby" # false # オブジェクト比較メソッド "Ruby".equal? "Ruby" # 0 (多言語でいうところのfalse) # 正規表現を利用する比較 "Ruby" =~ /ruby/i
注意
エンコーディングが違うと比較してもfalseになってしまう
数え上げ
# "R" "Ruby"[0] # "u" "Ruby"[1] # "y" "Ruby"[-1] # "ub" "Ruby関西"[1, 2] # "y関" "Ruby関西"[3.-2]
each_byteとかブロックを使うことのも可能
破壊(オブジェクトの変更)
s = "ruby" s.upcae # "ruby" p s t = s t.upcae! # "RUBY" p s
オブジェクトのコピー = 変数
t = sとかやると、同じオブジェクトを指している
破壊的メソッドの使用には注意を要する
メソッドの結果を別の変数に格納すれば t と s は
別のオブジェクトを参考出来る
- 型キャストしてからの比較
- キャストしない比較
- オブジェクトを比較する