Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Stringクラス
クラスの継承リスト: String < Enumerable < Comparable < Object < Kernel
文字列のクラスです。 NUL 文字を含む任意のバイト列を扱うことができます。 文字列の長さにはメモリ容量以外の制限はありません。
文字列は通常、文字列リテラルを使って生成します。 以下に文字列リテラルの例をいくつか示します。
'str\\ing' # シングルクオート文字列 (エスケープシーケンスがほぼ無効) "string\n" # ダブルクオート文字列 (エスケープシーケンスがすべて有効) %q(str\\ing) # 「%q」文字列 (エスケープシーケンスがほぼ無効、デリミタが変えられる) %Q(string\n) # 「%Q」文字列 (エスケープシーケンスがすべて有効、デリミタが変えられる) # ヒアドキュメント <<End この行はヒアドキュメント End # ダブルクオートヒアドキュメント (クオートなしの場合と同じ) <<"End" この行はヒアドキュメント End # シングルクオートヒアドキュメント (一切のエスケープシーケンスが無効) <<'End' この行はヒアドキュメント End # 終端記号がインデントされたヒアドキュメント # シングルクオート、ダブルクオートとの併用も可能 <<-End この行はヒアドキュメント (終端記号をインデントできる) End
Ruby の String クラスは mutable です。 つまり、オブジェクト自体を破壊的に変更できます。
「破壊的な変更」とは、あるオブジェクトの内容自体を変化させることです。 例えば文字列のすべての文字を破壊的に大文字へ変更する String#upcase! メソッドの使用例を以下に示します。
a = "string" b = a a.upcase! p a # => "STRING" p b # => "STRING"
この例では、a に対してメソッドを呼んだにも関わらず b も変更されています。 これは、変数 a と b が一つの文字列オブジェクトを指していて、 upcase! メソッドでそのオブジェクト自体が変更されたからです。
upcase! の非破壊版である String#upcase を使った例を以下に示します。 こちらでは a の変更が b に波及しません。
a = "string" b = a a = a.upcase p a # => "STRING" p b # => "string"
一般には、破壊的「ではない」メソッドを 中心に使っていくほうがバグが出にくくなります。
String クラスのメソッドには破壊的なメソッドも非破壊的なメソッドもあります。 破壊的なメソッドの例としては concat, sub!, upcase! などが挙げられます。 非破壊的なメソッドの例としては index, sub, upcase などが挙げられます。
同じ動作で破壊的なメソッドと非破壊的なメソッドの両方が定義されているときは、 破壊的なバージョンには名前の最後に「!」が付いています。 例えば upcase メソッドは非破壊的で、upcase! メソッドは破壊的です。
ただし、この命名ルールを 「破壊的なメソッドにはすべて『!』が付いている」と解釈しないでください。 例えば concat には「!」が付いていませんが、破壊的です。あくまでも、 「『!』が付いているメソッドと付いていないメソッドの両方があるときは、 『!』が付いているほうが破壊的」というだけです。 「『!』が付いているならば破壊的」は常に成立しますが、逆は必ずしも成立しません。
String クラスは自身を文字の列ではなくバイト列として扱います。 例えば str[1] は str の内容やエンコーディングに関わらず 2 バイトめの数値を返します。
マルチバイト文字列を正しく処理するためには、 原則としてインデックスよりも正規表現を使うメソッド、 例えば String#sub や String#gsub を中心に用いるべきです。 Ruby の正規表現エンジンはマルチバイト文字列に対応しているので、 正規表現を使って位置を指定すればマルチバイト文字を正しく処理できます。 なお、正規表現を正しく動作させるためには、組み込み変数 $KCODE を文字列のエンコーディングにあわせて設定する必要があります。
また、jcode ライブラリを利用すると String クラスのすべてのメソッドが文字単位で動作するようになります。 しかし jcode ライブラリはプロセス全体に影響するため、 中程度以上の規模プログラムで用いることは推奨できません。
定義 | 説明 | |
---|---|---|
new(string = "") -> String
|
string と同じ内容の新しい文字列を作成して返します。 引数を省略した場合は空文字列を生成して返します。 |
定義 | 説明 | |
---|---|---|
self % args -> String
|
printf と同じ規則に従って args をフォーマットします。 |
|
self * times -> String
|
文字列の内容を times 回だけ繰り返した新しい文字列を作成して返します。 |
|
self + other -> String
|
文字列と other を連結した新しい文字列を返します。 |
|
self << other -> self
|
self に文字列 other を破壊的に連結します。 other が 0 から 255 のまでの整数である場合は その 1 バイトを末尾に追加します (つまり、整数が示す ASCII コードの文字が追加されます)。 |
|
self <=> other -> Integer | nil
|
self と other を ASCII コード順で比較して、 self が大きい時には正の整数、等しい時には 0、小さい時には負の整数を返します。 このメソッドは Comparable モジュールのメソッドを実装するために使われます。 |
|
self == other -> bool
|
文字列の内容が文字列 other の内容と等しいときに true を返します。 等しくなければ false を返します。 |
|
self =~ other -> Integer
|
正規表現 other とのマッチを行います。 マッチが成功すればマッチした位置のインデックスを、そうでなければ nil を返します。 |
|
self[nth] -> Integer
|
nth 番目のバイトを整数 (文字コード) で返します。 nth が負の場合は文字列の末尾から数えます。 つまり、 self.size + nth 番目のバイトを返します。 |
|
self[nth, len] -> String | nil
|
nth バイト番目から長さ len バイトの部分文字列を新しく作って返します。 nth が負の場合は文字列の末尾から数えます。 |
|
self[substr] -> String | nil
|
self が substr を含む場合、一致した文字列を新しく作って返します。 substr を含まなければ nil を返します。 |
|
self[regexp, nth = 0] -> String
|
正規表現 regexp の nth 番目の括弧にマッチする最初の部分文字列を返します。 nth を省略したときや 0 の場合は正規表現がマッチした部分文字列全体を返します。 正規表現が self にマッチしなかった場合や nth に対応する括弧がないときは nil を返します。 |
|
self[range] -> String
|
rangeで指定したインデックスの範囲に含まれる部分文字列を返します。 |
|
self[nth] = val
|
nth 番目のバイトを文字列 val で置き換えます。 |
|
self[nth, len] = val
|
nth バイト番目から長さ len バイトの部分文字列を文字列 val で置き換えます。 |
|
self[substr] = val
|
文字列中の substr に一致する最初の部分文字列を文字列 val で置き換えます。 |
|
self[regexp, nth] = val
|
正規表現 regexp の nth 番目の括弧にマッチする 最初の部分文字列を文字列 val で置き換えます。 |
|
self[regexp] = val
|
正規表現 regexp にマッチした部分文字列全体を val で置き換えます。 |
|
self[range] = val
|
rangeで指定したインデックスの範囲に含まれる部分文字列を文字列 val で置き換えます。 |
|
each_byte {|byte| ... } -> self
|
文字列の各バイトに対して繰り返します。 |
|
bytesize -> Integer
|
文字列のバイト長を整数で返します。 |
|
capitalize -> String
|
文字列先頭の文字を大文字に、残りを小文字に変更した文字列を返します。 ただし、アルファベット以外の文字は位置に関わらず変更しません。 |
|
capitalize! -> self | nil
|
文字列先頭の文字を大文字に、残りを小文字に変更します。 ただし、アルファベット以外の文字は位置に関わらず変更しません。 |
|
casecmp(other) -> Integer | nil
|
String#<=> と同様に文字列の順序を比較しますが、 アルファベットの大文字小文字の違いを無視します。 |
|
center(width, padding = ' ') -> String
|
長さ width の文字列に self を中央寄せした文字列を返します。 self の長さが width より長い時には元の文字列の複製を返します。 また、第 2 引数 padding を指定したときは 空白文字の代わりに padding を詰めます。 |
|
each_char {|cstr| block } -> self
|
文字列の各文字に対して繰り返します。 $KCODE が適切に設定されていれば、マルチバイト文字も正しく扱われます。 |
|
chomp(rs = $/) -> String
|
self の末尾から rs で指定する改行コードを取り除いた文字列を生成し返します。 ただし、rs が "\n" ($/ のデフォルト値) のときは、 実行環境によらず "\r", "\r\n", "\n" のすべてを改行コードとみなして取り除きます。 |
|
chomp!(rs = $/) -> self | nil
|
self の末尾から rs で指定する改行コードを取り除きます。 ただし rs が "\n" ($/ のデフォルト値) のときは、 システムによらず "\r", "\r\n", "\n" のすべてを改行コードとみなして取り除きます。 |
|
chop -> String
|
String#chop の日本語対応版です。 |
jcode |
chop -> String
|
文字列の最後の文字を取り除いた新しい文字列を生成して返します。 ただし、文字列の終端が "\r\n" であればその 2 文字を取り除きます。 |
|
chop! -> self | nil
|
文字列の最後の文字を取り除きます。 ただし、終端が "\r\n" であればその 2 文字を取り除きます。 |
|
count(*chars) -> Integer
|
chars で指定された文字が文字列 self にいくつあるか数えます。 |
|
crypt(salt) -> String
|
self と salt から暗号化された文字列を生成して返します。 salt には英数字、ドット (「.」)、スラッシュ (「/」) から構成される、 2 バイト以上の文字列を指定します。 |
|
delete(*strs) -> String
|
self から strs に含まれる文字を取り除いた文字列を生成し返します。 |
|
delete(str) -> String
|
String#delete の日本語対応版です。 指定したパターンの文字列を取り除きます。 |
jcode |
delete!(*strs) -> self | nil
|
self から strs に含まれる文字を破壊的に取り除きます。 |
|
downcase -> String
|
'A' から 'Z' までの アルファベット大文字をすべて小文字に置き換えた新しい文字列を生成し返します。 アルファベット大文字以外の文字はすべてそのまま保存されます。 |
|
downcase! -> self | nil
|
文字列中の 'A' から 'Z' までの アルファベット大文字をすべて破壊的に小文字に置き換えます。 アルファベット大文字以外の文字はすべてそのまま保存されます。 |
|
dump -> String
|
文字列中の非表示文字をバックスラッシュ記法に置き換えた文字列を返します。 str == eval(str.dump) となることが保証されています。 |
|
each(rs = $/) {|line| ... } -> ()
|
文字列中の各行に対して繰り返します。 行の区切りは rs に指定した文字列で、 そのデフォルト値は変数 $/ の値です。 各 line には区切りの文字列も含みます。 |
|
each_char -> [String]
|
文字列中の各文字に対してブロックを呼びだします。 ブロックを指定せずに呼び出された時には、各文字の配列を返します。 |
jcode |
empty? -> bool
|
文字列が空 (つまり長さ 0) の時、真を返します。 |
|
end_with?(str) -> bool
|
self の末尾が str であるとき true を返します。 |
|
eql?(other) -> bool
|
self == other と同じです。 Hash クラス内での比較に使われます。 |
|
gsub(pattern, replace) -> String
|
文字列中で pattern にマッチする部分全てを 文字列 replace で置き換えた文字列を生成し返します。 |
|
gsub(pattern) {|matched| .... } -> String
|
文字列中で pattern にマッチした部分を順番にブロックに渡し、 その実行結果で置き換えます。 ブロックなしの場合と違い、ブロックの中からは 組み込み変数 $1, $2, $3, ... を問題なく参照できます。 |
|
gsub!(pattern, replace) -> self | nil
|
文字列中で pattern にマッチする部分全てを文字列 replace に破壊的に置き換えます。 |
|
gsub!(pattern) {|matched| .... } -> self | nil
|
文字列中で pattern にマッチする部分全てを順番にブロックに渡し、 その評価結果に置き換えます。 |
|
hash -> Integer
|
self のハッシュ値を返します。 eql? で等しい文字列は、常にハッシュ値も等しくなります。 |
|
hex -> Integer
|
文字列に 16 進数で数値が表現されていると解釈して整数に変換します。 接頭辞 "0x", "0X" とアンダースコアは無視されます。 文字列が [_0-9a-fA-F] 以外の文字を含むときはその文字以降を無視します。 |
|
include?(substr) -> bool
|
文字列中に部分文字列 substr が含まれていれば真を返します。 |
|
index(pattern, pos = 0) -> Integer
|
インデックス pos から右に向かって pattern を検索し、 最初に見つかった部分文字列の左端のインデックスを返します。 見つからなければ nil を返します。 |
|
insert(pos, other) -> ()
|
nth 番目の文字の直前に文字列 other を挿入します。 self[pos, 0] = other と同じ操作です。 |
|
inspect -> String
|
文字列オブジェクトの内容を、出力したときに人間が読みやすいような適当な形式に変換します。 変換された文字列は印字可能な文字のみによって構成されます |
|
intern -> Symbol
|
文字列に対応するシンボル値 Symbol を返します。 |
|
length -> Integer
|
文字列のバイト数を返します。 |
|
ljust(width, padding = ' ') -> String
|
長さ width の文字列に self を左詰めした文字列を返します。 self の長さが width より長い時には元の文字列の複製を返します。 また、第 2 引数 padding を指定したときは 空白文字の代わりに padding を詰めます。 |
|
lstrip -> String
|
文字列の先頭にある空白文字を全て取り除いた新しい文字列を返します。 空白文字の定義は " \t\r\n\f\v" です。 |
|
lstrip! -> self | nil
|
文字列の先頭にある空白文字を全て破壊的に取り除きます。 空白文字の定義は " \t\r\n\f\v" です。 |
|
match(regexp) -> MatchData
|
regexp.match(self) と同じです。 regexp が文字列の場合は、正規表現にコンパイルします。 詳しくは Regexp#match を参照してください。 |
|
succ -> String
|
self の「次の」文字列を返します。 |
|
succ! -> String
|
self を「次の」文字列に置き換えます。 「次の」文字列は、アルファベットなら 16 進数、 数字なら 10 進数とみなして計算されます。 「次の」文字列の計算では "99" → "100" のように繰り上げも行われます。 このとき負符号などは考慮されません。 |
|
oct -> Integer
|
文字列を 8 進文字列であると解釈して、整数に変換します。 |
|
partition(sep) -> [String, String, String]
|
セパレータ sep が最初に登場する部分で self を 3 つに分割し、 [最初のセパレータより前の部分, セパレータ, それ以降の部分] の 3 要素の配列を返します。 |
|
replace(other) -> String
|
self の内容を other の内容で置き換えます。 |
|
reverse -> String
|
文字列をバイト単位で左右逆転した文字列を返します。 |
|
reverse! -> ()
|
文字列をバイト単位で左右逆転します。 |
|
rindex(pattern, pos = self.size) -> Integer | nil
|
文字列のインデックス pos から左に向かって pattern を探索します。 見つかった部分文字列の左端のインデックスを返します。 見つからなければ nil を返します。 |
|
rjust(width, padding = ' ') -> String
|
長さ width の文字列に self を右詰めした文字列を返します。 self の長さが width より長い時には元の文字列の複製を返します。 また、第 2 引数 padding を指定したときは 空白文字の代わりに padding を詰めます。 |
|
rpartition(sep) -> [String, String, String]
|
セパレータ sep が最後に登場する部分で self を 3 つに分割し、 [最後のセパレータより前の部分, セパレータ, それ以降の部分] の 3 要素の配列を返します。 |
|
rstrip -> String
|
文字列の末尾にある空白文字を全て取り除いた新しい文字列を返します。 空白文字の定義は " \t\r\n\f\v\0" です。 |
|
rstrip! -> self | nil
|
文字列の末尾にある空白文字を全て破壊的に取り除きます。 空白文字の定義は " \t\r\n\f\v\0" です。 |
|
scan(re) -> [String] | [[String]]
|
self に対して正規表現 re を繰り返しマッチし、 マッチした部分文字列の配列を返します。 |
|
scan(re) {|s| ... } -> ()
|
正規表現 re がマッチした部分文字列をブロックに渡して実行します。 正規表現 re が括弧を含む場合は、 括弧で括られたパターンにマッチした文字列の配列を渡します。 |
|
slice!(nth) -> Integer
|
指定した範囲 (String#[] 参照) を 文字列から取り除いたうえで取り除いた部分文字列を返します。 |
|
split(sep = $;, limit = 0) -> [String] | [[String]]
|
第 1 引数 sep で指定されたセパレータによって文字列を limit 個まで分割し、 結果を文字列の配列で返します。 |
|
squeeze(str = nil) -> String
|
String#squeeze の日本語対応版です。 指定した文字を1文字にまとめます。 |
jcode |
squeeze(*chars) -> String
|
chars に含まれる文字が複数並んでいたら 1 文字にまとめます。 |
|
squeeze!(*chars) -> ()
|
chars に含まれる文字が複数並んでいたら 1 文字にまとめます。 |
|
start_with?(str) -> bool
|
self の先頭が str であるとき true を返します。 |
|
strip -> String
|
文字列先頭と末尾の空白文字を全て取り除いた文字列を生成して返します。 空白文字の定義は " \t\r\n\f\v" です。 また、文字列右側からは "\0" も取り除きますが、 左側の "\0" は取り除きません。 |
|
strip! -> self | nil
|
先頭と末尾の空白文字を全て破壊的に取り除きます。 空白文字の定義は " \t\r\n\f\v" です。 また、文字列右側からは "\0" も取り除きますが、 左側の "\0" は取り除きません。 |
|
sub(pattern, replace) -> String
|
文字列中で pattern にマッチした最初の部分を 文字列 replace で置き換えた文字列を生成し返します。 |
|
sub(pattern) {|matched| .... } -> String
|
文字列中で pattern にマッチした最初の部分をブロックに渡し、 その評価結果で置き換えた新しい文字列を返します。 ブロックなしの sub と違い、ブロックの中からは 組み込み変数 $1, $2, $3, ... を問題なく参照できます。 |
|
sub!(pattern, replace) -> self | nil
|
文字列中で pattern にマッチした最初の部分を文字列 replace へ破壊的に置き換えます。 |
|
sub!(pattern) {|matched| .... } -> self | nil
|
文字列中で pattern にマッチした最初の部分をブロックに渡し、 その評価結果へ破壊的に置き換えます。 |
|
succ -> String
|
String#succ の日本語対応版です。 「次の」文字列を返します。 |
jcode |
sum(bits = 16) -> Integer
|
文字列の bits ビットのチェックサムを計算します。 以下と同じです。 |
|
swapcase -> String
|
'A' から 'Z' までのアルファベット大文字を小文字に、 'a' から 'z' までのアルファベット小文字を大文字に変更した文字列を返します。 |
|
swapcase! -> self | nil
|
'A' から 'Z' までのアルファベット大文字を小文字に、 'a' から 'z' までのアルファベット小文字を大文字に、破壊的に変更します。 |
|
to_f -> Float
|
文字列を 10 進数表現と解釈して、浮動小数点数 Float に変換します。 |
|
to_i(base = 10) -> Integer
|
文字列を 10 進数表現された整数であると解釈して、整数に変換します。 |
|
to_s -> String
|
self を返します。 |
|
tr(pattern, replace) -> String
|
pattern 文字列に含まれる文字を検索し、 それを replace 文字列の対応する文字に置き換えます。 |
|
tr(search, replace) -> String
|
String#tr の日本語対応版です。 search に含まれる文字を検索し、 replace の対応する文字に 置き換えます。 |
jcode |
tr!(pattern, replace) -> self | nil
|
pattern 文字列に含まれる文字を検索し、 それを replace 文字列の対応する文字に破壊的に置き換えます。 |
|
tr_s(pattern, replace) -> String
|
文字列の中に pattern 文字列に含まれる文字が存在したら、 replace 文字列の対応する文字に置き換えます。さらに、 置換した部分内に同一の文字の並びがあったらそれを 1 文字に圧縮します。 |
|
tr_s(search, replace) -> String
|
String#tr_s の日本語対応版です。 文字列の中に search 文字列に含まれる文字が存在したら、 replace 文字列の対応する文字に置き換えます。さらに、 置換した部分内に同一の文字の並びがあったらそれを 1 文字に圧縮します。 |
jcode |
tr_s!(pattern, replace) -> self | nil
|
文字列の中に pattern 文字列に含まれる文字が存在したら、 replace 文字列の対応する文字に置き換えます。さらに、 置換した部分内に同一の文字の並びがあったらそれを 1 文字に圧縮します。 |
|
unpack(template) -> Array
|
Array#pack で生成された文字列を テンプレート文字列 template にしたがってアンパックし、 それらの要素を含む配列を返します。 |
|
upcase -> String
|
'a' から 'z' までのアルファベット小文字を大文字に変換した文字列を作成し返します。 |
|
upcase! -> self | nil
|
ASCII 文字列の範囲内で 'a' から 'z' までの アルファベット小文字を全て大文字にします。 このメソッドは self を破壊的に変更して返しますが、 置換が起こらなかった場合は nil を返します。 |
|
upto(max, exclusive = false) {|s| ... } -> self
|
self から始めて max まで 「次の文字列」を順番にブロックに与えて繰り返します。 「次」の定義については String#succ を参照してください。 |
<
<=
>
>=
between?
all?
any?
collect
cycle
detect
drop
drop_while
each_cons
each_slice
each_with_index
entries
find_all
find_index
first
grep
group_by
include?
inject
max
max_by
min
min_by
minmax
minmax_by
none?
one?
reject
reverse_each
sort
sort_by
take
take_while
to_set
zip
===
__id__
__send__
_dump
class
clone
dclone
display
enum_for
equal?
extend
freeze
frozen?
initialize
initialize_copy
instance_eval
instance_exec
instance_of?
instance_variable_defined?
instance_variable_get
instance_variable_set
instance_variables
is_a?
marshal_dump
marshal_load
method
method_missing
methods
nil?
pretty_inspect
pretty_print
pretty_print_cycle
pretty_print_inspect
pretty_print_instance_variables
private_methods
protected_methods
public_methods
remove_instance_variable
respond_to?
singleton_method_added
singleton_method_removed
singleton_method_undefined
singleton_methods
taint
tainted?
tap
to_ary
to_hash
to_int
to_io
to_proc
to_regexp
to_yaml
to_yaml_properties
to_yaml_style
untaint
定義 | 説明 | ライブラリ |
---|---|---|
is_binary_data?
|
yaml | |
is_complex_yaml?
|
yaml | |
iseuc -> bool
|
self が EUC-JP なバイト列として正当であるかどうかを判定します。 |
kconv |
issjis -> bool
|
self が Shift_JIS なバイト列として正当であるかどうかを判定します。 |
kconv |
isutf8 -> bool
|
self が UTF-8 なバイト列として正当であるかどうかを判定します。 |
kconv |
jcount(str) -> Integer
|
String#count の日本語対応版です。 |
jcode |
jlength -> Integer
|
String#length の日本語対応版です。 |
jcode |
kconv(out_code, in_code = Kconv::AUTO) -> String
|
self のエンコーディングを out_code に変換した文字列を 返します。 out_code in_code は Kconv の定数で指定します。 |
kconv |
mbchar? -> Integer|nil
|
self に多バイト文字が最初に現れる位置を返します。 多バイト文字が含まれていなければ nil を返します。 |
jcode |
scanf(format) -> Array
|
ブロックを指定しない場合、見つかった文字列を format に従って変 換し、そのオブジェクトの配列を返します。 format で指定した文字列が見つからない場合は空の配列を 生成して返します。 |
scanf |
shellescape -> String
|
文字列を Bourne シェルのコマンドライン中で安全に使えるようにエスケープします。 |
shellwords |
shellsplit -> [String]
|
Bourne シェルの単語分割規則に従った空白区切りの単語分割を行い、 単語 (文字列) の配列を返します。 |
shellwords |
to_d -> BigDecimal
|
自身を BigDecimal に変換します。BigDecimal(self) と同じです。 |
bigdecimal/util |
to_ptr -> DL::PtrData
|
自身を複製し、複製した文字列を指す DL::PtrData を返します。 この返り値には、DL::FREE が free 関数としてセットされています。 |
dl |
toeuc -> String
|
self のエンコーディングを EUC-JP に変換した文字列を 返します。変換元のエンコーディングは文字列の内容から推測します。 |
kconv |
tojis -> String
|
self のエンコーディングを iso-2022-jp に変換した文字列を 返します。変換元のエンコーディングは文字列の内容から推測します。 |
kconv |
tosjis -> String
|
self のエンコーディングを shift_jis に変換した文字列を 返します。変換元のエンコーディングは文字列の内容から推測します。 |
kconv |
toutf16 -> String
|
self のエンコーディングを UTF-16BE に変換した文字列を 返します。変換元のエンコーディングは文字列の内容から推測します。 |
kconv |
toutf8 -> String
|
self のエンコーディングを UTF-8 に変換した文字列を 返します。変換元のエンコーディングは文字列の内容から推測します。 |
kconv |