前 - 上 - 次 - 目次

# String

  文字列クラス．`String`クラスは任意の長さのバイト 列を扱うことができます．

  `String`クラスのメソッドには名前が ``!`'で終るものがあります．これらのメソッドは文字 列の中身を直接変更するものです．``!`'のついていな い同じ名前のメソッドは文字列のコピーを作ってそちらを更新しま すのでやや遅いですが，より安全です．例えば:

  >     f = "string"
  >     print f, f.sub("str", "ski"), f
  >            => string, skiing, string
  >     print f, f.sub!("str", "ski"), f
  >            => skiing, skiing, skiing

## スーパークラス:

  `Object`

## インクルードしているモジュール:

  `Comparable`
  `Enumerable`

## クラスメソッド:

  `new(string)`

    stringと同じ内容の新しい文字列を返します．

## メソッド:

  `self + other`

    文字列の結合を行います．

  `self * times`

    文字列の繰り返し．例えば`"x" * 4`は`"xxxx"` を返します．

  `self % args`

    文字列のフォーマット．`sprintf(self, *args)`と ほぼ同じ．

  `self == other`
  `self > other`
  `self >= other`
  `self < other`
  `self <= other`

    文字列の比較．変数`$=`の値が偽である時，比較はア ルファベットの大文字小文字を無視して行われます．

  `self << other`

    文字列への内容の追加．

  `self =~ other`

    正規表現のマッチを行います．マッチが成功すればマッチした位置 のインデックスを，そうでなければ`nil`を返します． otherが文字列であった場合には正規表現へのコンパイ ルが行われます．

  `~ self`

    `$_ =~ self`と同じです．

  `self[nth]`

    nth番目の文字(文字コードを示すFixnum)を返します．

  `self[start..last]`

    start番目の文字からlast番目の文字まで の部分文字列を返します．部分文字列は両端を含みます．

  `self[start, length]`

    startから長さlengthだけ部分文字列を返 します．

  `self[nth] = val`

    nth番目の文字をvalに変更します．文字列 がフリーズされている時には例外が発生します．

  `self[start..last] = val`

    startからlastまでの部分文字列を valに置き換えます．

  `self[beg, len] = val`

    startから長さlengthの部分文字列を valに置き換えます．

  `self <=> other`

    `self`と`other`を辞書順で比較して， `self`が大きい時に正，等しい時に０，小さい時に負 の整数を返します．

  `<<(other)`
  `concat(other)`

    otherの内容を追加します．

  `capitalize`
  `capitalize!`

    先頭の文字がアルファベットであれば大文字に変更します．

  `chop`
  `chop!`

    文字列の最後の文字を取り除きます(終端が"\r\n"であれば2文字取 り除きます)．`chop!`は文字列そのものを変更します． `chop!`は取り除く文字が無かった時には `nil`を返します．

  `chomp([rs])`
  `chomp!([rs])`

    文字列の末尾からrsで指定する行区切りを取り除きま す．rsのデフォルト値は変数`$/`の値です． `chomp!`は文字列そのものを変更します． `chomp!`は取り除く改行が無かった時には `nil`を返します．

  `clone`
  `dup`

    文字列と同じ内容を持つ新しい文字列を返します．フリーズした文 字列の`clone`はフリーズされた文字列を返しますが， `dup`は内容の等しいフリーズされていない文字列を返 します．

  `crypt(salt)`

    `crypt(3)`を使って文字列を暗号化します． saltは2バイト以上の任意の文字列を指定します．

  `delete(str)`
  `delete!(str)`

    文字列からstrに含まれる文字を取り除きます． strの形式は`tr(1)`と同じです．つまり， ``a-c`'は``a`'から``c`'を意 味し，文字列の先頭が``^`'の場合は文字列に含まれない文字 を削除します． `delete!`は取り除く文字が無かった時には `nil`を返します．

  `downcase`
  `downcase!`

    文字列中の大文字を小文字に置き換えます． `tr("A-Z","a-z")`よりもちょっと速そうです． `downcase!`は置き換えが発生しなかった時には `nil`を返します．

  `dump`

    文字列中の非表示文字をバックスラッシュ記法に置き換えた文字列を返し ます．`str == eval(str.dump)`が保証されます．

  `each_byte {|byte|...}`

    文字列中の各バイトに対して繰り返します．

  `each([rs]) {|line|...}`
  `each_line([rs]) {|line|...}`

    文字列中の各行に対して繰り返します．行の区切りは rsで指定します．rsのデフォルト値は変数 `$/`の値です．

  `empty?`

    文字列が空(つまり長さ0)の時，真を返します．

  `freeze`

    文字列の更新を禁止します．フリーズされた文字列の変更は例外を 発生させます．

  `frozen?`

    文字列がフリーズされている時真を返します．

  `gsub(pattern, replace)`
  `gsub!(pattern, replace)`

    文字列中でpatternにマッチする部分を全てreplaceに 置き換えます．置換文字列replace中の``\&'`と ``\0'`はマッチした部分文字列に，``\1...\9'`はn番 目の括弧の内容に置き換えられます．置換文字列内では`\``， `\'`，`\+`も使えます．これらは `$``， `$'`，`$+`に対応します．

    注意: replaceの中で `$<digits>`は使えません．この文字列が評価される時点で はまだマッチが行われていないからです．

    `gsub!`は元の文字列を書き換えます．置換が行なわれなかった場 合は`nil`を返します．一方，`gsub`は文字列のコピー を変更します．マッチが成功しなかった場合には元の文字列を返します．

  `gsub(pattern) {...}`
  `gsub!(pattern) {...}`

    `gsub`と`gsub!`はブロックを指定して呼び出された 時には，全てのマッチした部分をブロックを評価した値で置き換えます．ブロッ クの中では変数`$<digits>`を参照できます．マッチした部 分文字列がブロックの引数として渡されます．

  `hex`

    文字列を16進文字列であると解釈して，整数に変換します．

  `index(substr[, pos])`

    文字列中のsubstrのインデックスを返します．もし見付からなけ れば`nil`を返します．posが与えられた時にはその 位置から検索を開始します．substrは文字列，文字コードを示す 整数，正規表現のいずれかを指定します．

  `intern`

    文字列に対応するシンボル値(Fixnum)を返します．文字列はナルキャラクタ ('\0')を含むことができません．

  `length`
  `size`

    文字列の長さを返します．

  `ljust(width)`
  `rjust(width)`
  `center(width)`

    それぞれ左詰め，右詰め，中央寄せした文字列を返します．文字列の長さが widthより長い時には元の文字列をそのまま返します．

  `oct`

    文字列を8進文字列であると解釈して，整数に変換します．文字列が8進 (`/^[0-7]+/`)でない時には0を返します．

  `reverse`
  `reverse!`

    文字列をひっくり返します．

  `replace(other)`

    文字列の内容をotherの内容で置き換えます．

  `rindex(substr[, pos])`

    文字列中の最後のsubstrの位置を返します．もし見付からなけれ ば`nil`を返します．posが与えられた時にはその位置 から検索を開始します．substrは文字列，文字コードを示す 整数，正規表現のいずれかを指定します．

  `scan(re)`
  `scan(re) {...}`

    reで与えられる正規表現を文字列に対して繰り返しマッ チを行い，正規表現中の括弧で括られた部分にマッチした文字列を 配列として返します．正規表現が括弧を含まない場合はマッチした 部分文字列の配列を返します．ブロックを指定して呼び出された時に は，括弧で括られた部分にマッチする部分文字列(括弧を含まない 場合はマッチ全体)をブロックのパラメータとします．

  `split([sep[, limit]])`

    文字列をsepで指定されたパターンによって分割して配列に格納し ます．sepが省略された時のデフォルトはシステム変数 `$;`の値が用いられます．`$;`の値が `nil`の時には先頭の空白を除いて空白で分割を行います．

    limitが省略された時には配列末尾の空文字列は取り除かれます． limitが指定されて，その値が負でない時には最大 limit個のフィールドに分割します． limitの値が負の時には無限に大きいlimit が指定されたかのように分割します．

    sepで指定されたパターンが空文字列とマッチする場合は文字列が 1文字ずつに分割されます．例えば:

    >     print 'hi there'.split(/ */).join(':');
    >     	=> h:i:t:h:e:r:e

  `squeeze([str])`
  `squeeze!([str])`

    strに含まれる同一の文字の並びをひとつにまとめます． `squeeze!`は文字列を変更しなかった時には `nil`を返します．

  `strip`
  `strip!`

    先頭と末尾の空白(whitespace)を取り除きます． `strip!`は文字列を変更しなかった時には `nil`を返します．

  `sub(pattern, replace)`
  `sub!(pattern, replace)`

    文字列中でpatternに最初にマッチする部分をreplace に置き換えます．置換文字列replace中の``\&'` と``\0'`はマッチした部分文字列に，``\1...\9'`はn 番目の括弧の内容に置き換えられます．置換文字列内では`\``， `\'`，`\+`も使えます．これらは `$``， `$'`，`$+`に対応します．

    注意: replaceの中で `$<digits>`は使えません．この文字列が評価される時点で はまだマッチが行われていないからです．

    `sub!`は元の文字列を書き換えます．置換が行なわれなかった場 合は`nil`を返します．一方，`sub`は文字列のコピー を変更します．マッチが成功しなかった場合には元の文字列を返します．

  `sub(pattern) {...}`
  `sub!(pattern) {...}`

    `sub`と`sub!`はブロックを指定して呼び出された時 には，最初にマッチした部分をブロックを評価した値で置き換えます．ブロッ クの中では変数`$<digits>`を参照できます．マッチした部 分文字列がブロックの引数として渡されます．

  `succ`
  `succ!`

    以下のような次の文字列を返します．

    >     "aa".succ => "ab"
    >     "99".succ => "100"
    >     "a9".succ => "b0"
    >     "Az".succ => "Ba"
    >     "zz".succ => "aaa"

    `succ!`は文字列の内容を破壊的に修正します．

  `sum([bits])`

    文字列のbitsビットのチェックサムを計算します． bitsの省略値は16です．例えば，以下のコードでSystem Vの `sum`プログラムと同じ値を得られます．

    >     sum = 0
    >     while gets
    >       sum += $_.sum
    >     end
    >     sum %= 65536

  `swapcase`
  `swapcase!`

    全ての大文字を小文字に，小文字を大文字に変更します． `swapcase!`は置き換えが発生しなかった時には `nil`を返します．

  `to_f`

    文字列を`Float`に変換します．

  `to_i`

    文字列を10進で解釈して整数に変換します．

  `tr(search, replace)`
  `tr!(search, replace)`

    文字列の中にsearch文字列に含まれる文字が存在すれば， replace文字列の対応する文字で置き換えます． search文字列の最初の文字が`^`である場合， 続く文字列に含まれない文字列が置換の対象になります．

    `tr!`は文字列を変更しなかった時には `nil`を返します．

  `tr_s(search, replace)`
  `tr_s!(search, replace)`

    文字列の中にsearch文字列に含まれる文字が存在すれば， replace文字列の対応する文字で置き換えます． 置換した部分に同一の文字の並びを1文字に圧縮します． tr同様， search文字列の最初の文字が`^`である場合， 続く文字列に含まれない文字列が置換の対象になります．

    `tr_s!`は文字列を変更しなかった時には `nil`を返します．

  `unpack(template)`

    パックされた(おそらくは `Array#pack`によっ て生成された)文字列をtemplate文字列にしたがってア ンパックし，それらの要素を含む配列を返します． template文字列は`Array#pack`とほぼ同様 で，以下の通りです．

    > `a`
    >   ASCII文字列(後続するnull文字やスペースを残す)
    > `A`
    >   ASCII文字列(後続するnull文字やスペースを削除)
    > `b`
    >   ビットストリング(下位ビットから上位ビット)
    > `B`
    >   ビットストリング(上位ビットから下位ビット)
    > `h`
    >   16進文字列(下位ニブルが先)
    > `H`
    >   16進文字列(上位ニブルが先)
    > `c`
    >   char
    > `C`
    >   unsigned char
    > `s`
    >   short
    > `S`
    >   unsigned short
    > `i`
    >   int
    > `I`
    >   unsigned int
    > `l`
    >   long
    > `L`
    >   unsigned long
    > `m`
    >   base64された文字列
    > `n`
    >   ネットワークバイトオーダーのshort
    > `N`
    >   ネットワークバイトオーダーのlong
    > `v`
    >   リトルエンディアン(Intel(またはVax)フォーマット)のshort
    > `V`
    >   リトルエンディアン(Intel(またはVax)フォーマット)のlong
    > `f`
    >   単精度浮動小数点数(機種依存)
    > `d`
    >   倍精度浮動小数点数(機種依存)
    > `p`
    >   ナル終端の文字列へのポインタ
    > `P`
    >   構造体(固定長文字列)へのポインタ
    > `u`
    >   uuencodされた文字列
    > `x`
    >   1バイト読み飛ばす
    > `X`
    >   1バイト後退
    > `@`
    >   絶対位置への移動

  `upcase`
  `upcase!`

    小文字を全て大文字にする．`tr("a-z", "A-Z")`よりもちょっと 速そうです．

    `upcase!`は置き換えが発生しなかった時には `nil`を返します．

  `upto(max) {...}`

    `self`から始まって，maxまで次の 文字列を順に繰り返します．次の定義については `succ`を参照してください． このメソッドは `Range#each` の内部で用いられているので，以下のようなコードは:

    >          for i in "a" .. "ba"
    >            print i, "\n"
    >          end

    ``a, b, c,...z,aa,...az, ba`'を出力します．

前 - 上 - 次 - 目次

matz@netlab.co.jp