<?xml version="1.0" encoding="euc-jp"?>
<!DOCTYPE rubyapi SYSTEM "rubyapi.dtd">
<rubyapi>
  <author>matz@netlab.co.jp</author>
  <class>
    <name>String</name>
    <super>Object</super>
    <include>Comparable</include>
    <include>Enumerable</include>
    <desc xml:lang="ja">
      <p>
        文字列クラス．<code>String</code>クラスは任意の長さのバイト
        列を扱うことができます．
      </p>
      <p>
        <code>String</code>クラスのメソッドには名前が
        `<samp>!</samp>'で終るものがあります．これらのメソッドは文字
        列の中身を直接変更するものです．`<samp>!</samp>'のついていな
        い同じ名前のメソッドは文字列のコピーを作ってそちらを更新しま
        すのでやや遅いですが，より安全です．例えば:
      </p>
      <sample skipindent="first">
        f = "string"
        print f, f.sub("str", "ski"), f
               =&gt; string, skiing, string
        print f, f.sub!("str", "ski"), f
               =&gt; skiing, skiing, skiing
      </sample>
    </desc>
    <desc xml:lang="en">
      <p>
        The <code>String</code> class represents the arbitrary length
        of byte string.
      </p>
      <p>
        Some methods for the <code>String</code> class which have the
        name ends with `<samp>!</samp>', modify the contents of the
        strings.  The methods without `<samp>!</samp>' make copy of
        the string and modify them.  So, they are more slower but
        safer.  For example:
      </p>
<sample>
f = "string"
print f, f.sub("str", "ski"), f
       => string, skiing, string
print f, f.sub!("str", "ski"), f
       => skiing, skiing, skiing
</sample>
    </desc>

    <class_methods>
      <method>
        <usage>new(string)</usage>
        <desc xml:lang="ja">
          <var>string</var>と同じ内容の新しい文字列を返します．
        </desc>
        <desc xml:lang="en">
          Returns a newly created string object which has same
          contents to the <var>string</var>.
        </desc>
      </method>
    </class_methods>

    <instance_methods>

      <method>
        <usage>self + other</usage>
        <desc xml:lang="ja">
          文字列の結合を行います．
        </desc>
      </method>

      <method>
        <usage>self * times</usage>
        <desc xml:lang="ja">
          文字列の繰り返し．例えば<code>"x" * 4</code>は
          <code>"xxxx"</code>を返します．
        </desc>
      </method>

      <method>
        <usage>self % args</usage>
        <desc xml:lang="ja">
          文字列のフォーマット．<code>sprintf(self, *args)</code>と
          ほぼ同じ．
        </desc>
      </method>

      <methods>
        <method><usage>self == other</usage></method>
        <method><usage>self &gt; other</usage></method>
        <method><usage>self &gt;= other</usage></method>
        <method><usage>self &lt; other</usage></method>
        <method><usage>self &lt;= other</usage></method>
        <desc xml:lang="ja">
          文字列の比較．変数<r>$=</r>の値が偽である時，比較はア
          ルファベットの大文字小文字を無視して行われます．
        </desc>
      </methods>

      <method>
        <usage>self &lt;&lt; other</usage>
        <desc xml:lang="ja">
          文字列への内容の追加．
        </desc>
      </method>

      <method>
        <usage>self =~ other</usage>
        <desc xml:lang="ja">
          正規表現のマッチを行います．マッチが成功すればマッチした位置
          のインデックスを，そうでなければ<code>nil</code>を返します．
          <var>other</var>が文字列であった場合には正規表現へのコンパイ
          ルが行われます．
        </desc>
      </method>

      <method>
        <usage>~ self</usage>
        <desc xml:lang="ja">
          <code>$_ =~ self</code>と同じです．
        </desc>
      </method>

      <method>
        <usage>self[nth]</usage>
        <desc xml:lang="ja">
          <var>nth</var>番目の文字(文字コードを示す<r>Fixnum</r>)を
          返します．
        </desc>
      </method>

      <method>
        <usage>self[start..last]</usage>
        <desc xml:lang="ja">
          <var>start</var>番目の文字から<var>last</var>番目の文字まで
          の部分文字列を返します．部分文字列は両端を含みます．
        </desc>
      </method>

      <method>
        <usage>self[start, length]</usage>
        <desc xml:lang="ja">
          <var>start</var>から長さ<var>length</var>だけ部分文字列を返
          します．
        </desc>
      </method>

      <method>
        <usage>self[nth] = val</usage>
        <desc xml:lang="ja">
          <var>nth</var>番目の文字を<var>val</var>に変更します．文字列
          がフリーズされている時には例外が発生します．
        </desc>
      </method>

      <method>
        <usage>self[start..last] = val</usage>
        <desc xml:lang="ja">
          <var>start</var>から<var>last</var>までの部分文字列を
          <var>val</var>に置き換えます．
        </desc>
      </method>

      <method>
        <usage>self[beg, len] = val</usage>
        <desc xml:lang="ja">
          <var>start</var>から長さ<var>length</var>の部分文字列を
          <var>val</var>に置き換えます．
        </desc>
      </method>

      <method>
        <usage>self &lt;=&gt; other</usage>
        <desc xml:lang="ja">
          <code>self</code>と<code>other</code>を辞書順で比較して，
          <code>self</code>が大きい時に正，等しい時に０，小さい時に負
          の整数を返します．
        </desc>
      </method>

      <method>
        <usage>self &lt;&lt; other</usage>
        <usage>concat(other)</usage>
        <desc xml:lang="ja">
          <var>other</var>の内容を追加します．
        </desc>
      </method>

      <methods>
        <method><usage>capitalize</usage></method>
        <method><usage>capitalize!</usage></method>
        <desc xml:lang="ja">
          先頭の文字がアルファベットであれば大文字に変更します．
        </desc>
      </methods>

      <methods>
        <method><usage>chop</usage></method>
        <method><usage>chop!</usage></method>
        <desc xml:lang="ja">
          文字列の最後の文字を取り除きます(終端が"\r\n"であれば2文字取
          り除きます)．<code>chop!</code>は文字列そのものを変更します．
          <code>chop!</code>は取り除く文字が無かった時には
          <code>nil</code>を返します．
        </desc>
      </methods>

      <methods>
        <method><usage>chomp([rs])</usage></method>
        <method><usage>chomp!([rs])</usage></method>
        <desc xml:lang="ja">
          文字列の末尾から<var>rs</var>で指定する行区切りを取り除きま
          す．<var>rs</var>のデフォルト値は変数<r>$/</r>の値です．
          <code>chomp!</code>は文字列そのものを変更します．
          <code>chomp!</code>は取り除く改行が無かった時には
          <code>nil</code>を返します．
        </desc>
      </methods>

      <methods>
        <method><usage>clone</usage></method>
        <method><usage>dup</usage></method>
        <desc xml:lang="ja">
          文字列と同じ内容を持つ新しい文字列を返します．フリーズした文
          字列の<code>clone</code>はフリーズされた文字列を返しますが，
          <code>dup</code>は内容の等しいフリーズされていない文字列を返
          します．
        </desc>
      </methods>

      <method>
        <usage>crypt(salt)</usage>
        <desc xml:lang="ja">
          <samp>crypt(3)</samp>を使って文字列を暗号化します．
          <var>salt</var>は2バイト以上の任意の文字列を指定します．
        </desc>
      </method>

      <methods>
        <method><usage>delete(str)</usage></method>
        <method><usage>delete!(str)</usage></method>
        <desc xml:lang="ja">
          文字列から<var>str</var>に含まれる文字を取り除きます．
          <var>str</var>の形式は<samp>tr(1)</samp>と同じです．つまり，
          `<code>a-c</code>'は`<samp>a</samp>'から`<samp>c</samp>'を意
          味し，文字列の先頭が`<samp>^</samp>'の場合は文字列に含まれな
          い文字を削除します．
          <code>delete!</code>は取り除く文字が無かった時には
          <code>nil</code>を返します．
        </desc>
      </methods>

      <methods>
        <method><usage>downcase</usage></method>
        <method><usage>downcase!</usage></method>
        <desc xml:lang="ja">
          文字列中の大文字を小文字に置き換えます．
          <code>tr("A-Z","a-z")</code>よりもちょっと速そうです．
          <code>downcase!</code>は置き換えが発生しなかった時には
          <code>nil</code>を返します．
        </desc>
      </methods>

      <method>
        <usage>dump</usage>
        <desc xml:lang="ja">
          文字列中の非表示文字をエスケープ記法に置き換えた文字列を返し
          ます．<code>str == eval(str.dump)</code>が保証されます．
        </desc>
      </method>

      <method>
        <usage>each_byte {|char|...}</usage>
        <desc xml:lang="ja">
          文字列中の各文字に対して繰り返します．
        </desc>
      </method>

      <method>
        <usage>each([rs]) {|line|...}</usage>
        <usage>each_line([rs]) {|line|...}</usage>
        <desc xml:lang="ja">
          文字列中の各行に対して繰り返します．行の区切りは
          <var>rs</var>で指定します．<var>rs</var>のデフォルト値は変数
          <r>$/</r>の値です．
        </desc>
      </method>

      <method>
        <usage>empty?</usage>
        <desc xml:lang="ja">
          文字列が空(つまり長さ0)の時，真を返します．
        </desc>
      </method>

      <method>
        <usage>freeze</usage>
        <desc xml:lang="ja">
          文字列の更新を禁止します．フリーズされた文字列の変更は例外を
          発生させます．
        </desc>
      </method>

      <method>
        <usage>frozen</usage>
        <desc xml:lang="ja">
          文字列がフリーズされている時真を返します．
        </desc>
      </method>

      <methods>
        <method><usage>gsub(pattern, replace)</usage></method>
        <method><usage>gsub!(pattern, replace)</usage></method>
        <desc xml:lang="ja">
          <p>
            文字列中で<var>pattern</var>にマッチする部分を全て
            <var>replace</var>に置き換えます．置換文字列
            <var>replace</var>中の<samp>`\&amp;'</samp>と
            <samp>`\0'</samp>はマッチした部分文字列に，
            <samp>`\1...\9'</samp>はn番目の括弧の内容に置き換えられま
            す．置換文字列内では<samp>\`</samp>，<samp>\'</samp>，
            <samp>\+</samp>も使えます．これらは <r>$`</r>，
            <r>$'</r>，<r>$+</r>に対応します．
          </p>
          <p>
            <strong>注意</strong>: <var>replace</var>の中で
            <code>$&lt;digits&gt;</code>は使えません．この文字列が評価
            される時点ではまだマッチが行われていないからです．
          </p>
          <p>
            <code>gsub!</code>は元の文字列を書き換えます．置換が行なわ
            れなかった場合は<code>nil</code>を返します．一方，
            <code>gsub</code>は文字列のコピーを変更します．マッチが成
            功しなかった場合には元の文字列を返します．
          </p>
        </desc>
      </methods>

      <methods>
        <method><usage>gsub(pattern) {...}</usage></method>
        <method><usage>gsub!(pattern) {...}</usage></method>
        <desc xml:lang="ja">
          <code>gsub</code>と<code>gsub!</code>はブロックを指定して呼
          び出された時には，全てのマッチした部分をブロックを評価した値
          で置き換えます．ブロックの中では変数
          <code>$&lt;digits&gt;</code>を参照できます．マッチした部分文
          字列がブロックの引数として渡されます．
        </desc>
      </methods>

      <method>
        <usage>hex</usage>
        <desc xml:lang="ja">
          文字列を16進文字列であると解釈して，整数に変換します．
        </desc>
      </method>

      <method>
        <usage>index(substr[, pos])</usage>
        <desc xml:lang="ja">
          文字列中の<var>substr</var>のインデックスを返します．もし見
          付からなければ<code>nil</code>を返します．<var>pos</var>が与
          えられた時にはその位置から検索を開始します．
          <var>substr</var>は文字列，文字コードを示す整数，正規表現の
          いずれかを指定します．
        </desc>
      </method>

      <method>
        <usage>intern</usage>
        <desc xml:lang="ja">
          文字列に対応するシンボル値(<r>Fixnum</r>)を返します．文字列
          はナルキャラクタ('\0')を含むことができません．
        </desc>
      </method>

      <method>
        <usage>length</usage>
        <usage>size</usage>
        <desc xml:lang="ja">
          文字列の長さを返します．
        </desc>
      </method>

      <methods>
        <method><usage>ljust(width)</usage></method>
        <method><usage>rjust(width)</usage></method>
        <method><usage>center(width)</usage></method>
        <desc xml:lang="ja">
          それぞろ右詰め，左詰め，中央寄せした文字列を返します．文字列
          の長さが<var>width</var>より長い時には元の文字列をそのまま返
          します．
        </desc>
      </methods>

      <method>
        <usage>oct</usage>
        <desc xml:lang="ja">
          文字列を8進文字列であると解釈して，整数に変換します．文字列が8進
          (<code>/^[0-7]+/</code>)でない時には0を返します．
        </desc>
      </method>

      <methods>
        <method><usage>reverse</usage></method>
        <method><usage>reverse!</usage></method>
        <desc xml:lang="ja">
          文字列をひっくり返します．
        </desc>
      </methods>

      <method>
        <usage>replace(other)</usage>
        <desc xml:lang="ja">
          文字列の内容を<var>other</var>の内容で置き換えます．
        </desc>
      </method>

      <method>
        <usage>rindex(substr[, pos])</usage>
        <desc xml:lang="ja">
          文字列中の最後の<var>substr</var>の位置を返します．もし見付
          からなければ<code>nil</code>を返します．<var>pos</var>が与え
          られた時にはその位置で検索を終了します．<var>index</var>は文
          字列，文字コードを示す整数，正規表現のいずれかを指定します．
        </desc>
      </method>

      <method>
        <usage>scan(re)</usage>
        <usage>scan(re) {...}</usage>
        <desc xml:lang="ja">
          <var>re</var>で与えられる正規表現を文字列に対して繰り返しマッ
          チを行い，正規表現中の括弧で括られた部分にマッチした文字列を
          配列として返します．正規表現が括弧を含まない場合はマッチした
          部分文字列の配列を返します．ブロックを指定して呼び出された時に
          は，括弧で括られた部分にマッチする部分文字列(括弧を含まない
          場合はマッチ全体)をブロックのパラメータとします．
        </desc>
      </method>

      <method>
        <usage>split([sep[, limit]])</usage>
        <desc xml:lang="ja">
          <p>
            文字列を<var>sep</var>で指定されたパターンによって分割して
            配列に格納します．<var>sep</var>が省略された時のデフォルト
            はシステム変数<r>$;</r>の値が用いられます．<r>$;</r>の値が
            <code>nil</code>の時には先頭の空白を除いて空白で分割を行い
            ます．
          </p>
          <p>
            <var>limit</var>が指定された時には最大<var>limit</var>個の
            フィールドに分割します．
          </p>
          <p>
            <var>sep</var>で指定されたパターンが空文字列とマッチする場
            合は文字列が1文字ずつに分割されます．例えば:
            <sample skipindent="first">
              print 'hi there'.split(/ */).join(':');
                      =&gt; h:i:t:h:e:r:e
            </sample>
          </p>
        </desc>
      </method>

      <methods>
        <method><usage>squeeze([str])</usage></method>
        <method><usage>squeeze!([str])</usage></method>
        <desc xml:lang="ja">
          <var>str</var>に含まれる同一の文字の並びをひとつにまとめます．
          <code>squeeze!</code>は文字列を変更しなかった時には
          <code>nil</code>を返します．
        </desc>
      </methods>

<!--  テンプレート
      <method>
        <usage></usage>
        <desc xml:lang="ja">
        </desc>
      </method>

      <methods>
        <method><usage></usage></method>
        <method><usage></usage></method>
        <desc xml:lang="ja">
        </desc>
      </methods>
-->
    </instance_methods>
  </class>
</rubyapi>
