文字列の切り取りとクエリー操作

5734 ワード

Stringオブジェクトの最も重要な操作は[]の下付きアクセス操作かもしれませんが、文字列の内容を抽出したり、文字列の内容を変更したりすることができます.Ruby 1.8の文字列は1バイトまたは8ビットの文字コード配列として扱われ、lengthまたはsizeメソッドでこの配列の長さを得ることができます.[]にインデックス番号を設定することで、その位置の値を設定または得ることができます.
s = 'hello';   # Ruby 1.8
s[0]           #     104,     'h' ASCII 
s[s.length-1]  #     111,      'o' ASCII 
s[-1]          #     111,         
s[-2]          #     108,       'l' ASCII 
s[-s.length]   # 104:              
s[s.length]    # nil:            nil

インデックスは0から順方向に始まり、負数インデックスを使用すると最後のアルファベットは-1からインデックスが開始されます.また、Rubyでインデックス範囲外の下付き文字を与えた場合、Rubyは異常を投げ出すのではなく、nilを返します.
Ruby 1.9の戻り値は、文字の符号化ではなく文字列です.
s = 'hello';   # Ruby 1.9
s[0]           #   'h'
s[s.length-1]  #   'o'
s[-1]          #   'o'
s[-2]          #   'l'
s[-s.length]   #   'h'
s[s.length]    # nil:           nil

文字列の内容を変更する場合は、該当する位置に値を付けるだけでいい、Ruby 1.8では、Ruby 1で付与内容として文字コードまたは文字列を使用することができます.9では文字列を使用します.
s[0] = ?H        #             H
s[-1] = ?O       #              O
s[s.length] = ?! #        ,              

等号の右側に任意の文字列、マルチバイト文字列も許可されているか、空の文字列、次のコードはRuby 1にあります.8と1.9は正常に動作します.
s = "hello"      #       
s[-1] = ""       #         ,  s   hell
s[-1] = "p!"     #           s    "help!"

ほとんどの場合、個別の文字ではなく文字列の内容を取得する必要があります.文字列の一部を切り取るには、[]にカンマで区切られた2つの数字を与えることで、テキストを得ることができます.最初の数字は、切り取るテキストがどこからインデックスを開始するかを示し、2番目の文字は、切り取る内容の長さを示します.
s = "hello"
s[0,1] = "H"              #               H
s[s.length,0] = " world"  #               
s[5,0] = ","              #            
s[5,6] = ""               #                       ,  s == "Hellod"

文字列を切り取ったり、挿入したり、削除したり、修正したりする方法は、Range(範囲)オブジェクトを使用します.Rangeオブジェクトは、2つの数値の間に2つの連絡先のポイント番号で表されます.例えば、1.3は1~3の範囲を表します.
s = "hello"
s[2..3]           # "ll":     2 3   
s[-3..-1]         # "llo":          
s[0..0]           # "h": Range       
s[0...0]          # "":   Range  
s[2..1]           # "":      Range
s[7..10]          # nil:   Range       ,    nil
s[-2..-1] = "p!"     #    ,  s=="help!"
s[0...0] = "Please " #          ,  s== "Please help!"
s[6..10] = ""        #    ,  s== "Please!"

なお,索引の開始位置と切り取り文字の長さをカンマで区切る方式でそれぞれ指摘しているが,Rangeオブジェクトを用いると索引の範囲が定められており,両者は異なる.
また、インデックスとして文字列を使用することもできます.このようにすると、文字列にこの文字が含まれている最初の文字が見つかりません.与えられた文字が見つからない場合は、nilオブジェクトを返します.
 
  
Created with colorer-take5 library. Type 'ruby'

s = "hello"      
while(s["l"])     #            "l"
 s["l"] = "L";   #         "l"     "L"
end               #   s=="heLLo"

最後に、[]に正規表現を含めると、正規表現に合致する内容が得られます.
s[/[aeiou]/] = '*'
    #               

   http://blogruby.blogspot.com/2008/10/11.html