English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby 文字列(String)

RubyのStringオブジェクトは、1バイトまたは複数のバイトのシークエンスを格納または操作するために使用されます。

Rubyの文字列はシングルクォート文字列(')とダブルクォート文字列(")に分けられます。違いは、ダブルクォート文字列がもっと多くのエスケープ文字をサポートする点です。

シングルクォート文字列

最もシンプルな文字列はシングルクォート文字列で、シングルクォートの中に文字列を入れることができます:

'これはRubyプログラムの文字列です'

シングルクォート文字列の中でシングルクォート文字を使用する必要がある場合、シングルクォート文字列内でアンダースコア(\)を使用する必要があります。そうすることで、Rubyのエンジンはこのシングルクォート文字を文字列の終了記号と認識しません:

'Won\'t you read O\'Reilly\'s book?'

アンダースコアも別のアンダースコアをエスケープできます。そのため、2つ目のアンダースコアはエスケープ文字として解釈されません。

以下はRubyの文字列に関する特性です。

ダブルクォート文字列

ダブルクォート文字列の中で、 #{} 井号と大括号を使って式の値を計算する:

文字列に変数を埋め込む:

オンラインの例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
name1 = "Joe"
name2 = "Mary"
puts"こんにちは、#{name1}, #{name2})どこにいますか?"

以下の例の出力結果は:

こんにちは、Joeさん、Maryさんはどこにいますか?

文字列中进行いじり算数:

オンラインの例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
x, y, z= 12, 36, 72
puts"xの值为#{x"
puts"x + yの值为#{x + y"
puts"x + y + zの平均値は#{(x + y + z)/3 "}

以下の例の出力結果は:

xの値は 12
x + yの値は 48
x + y + zの平均値は 40

Rubyでは、%qと%Qを使用して導入された文字列変数がサポートされています。%qはシングルクォート引用規則を使用し、%Qはダブルクォート引用規則を使用します。さらに、(! [ {などの開始界定符と} ] )などの終了界定符が続きます。

qまたはQの後に続く文字は区切り文字です。区切り文字は任意の非アルファベット数字の単バイト文字です。例えば:[,{,(,<,!など、文字列は区切り文字が見つかるまで読み取られます。

オンラインの例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
desc1 = %Q{Rubyの文字列は''と""を使用できます。}
desc2 = %q|Rubyの文字列は''と""を使用できます。|
 
puts desc1
puts desc2

以下の例の出力結果は:

Rubyの文字列は''と""を使用できます。
Rubyの文字列は''と""を使用できます。

エスケープシンボル

以下は、反スラッシュシンボルでエスケープされるエスケープシンボルや非表示文字のリストです。

注意:ダブルクォート括弧内の文字列では、エスケープシンボルが解析されます。シングルクォート括弧内の文字列では、エスケープシンボルは解析されず、そのまま出力されます。

反スラッシュシンボル16進数文字説明
\a0x07警報文字
\b0x08バックスペースキー
\cx コントロール-x
\C-x コントロール-x
\e0x1bエスケープ文字
\f0x0c换頁文字
\M-\C-x メタ-コントロール-x
\n0x0a改行文字
\nnn 8進数表現法、nの範囲は0。7
\r0x0dリターン文字
\s0x20スペース文字
\t0x09タブ
\v0x0b垂直タブ
\x 文字x
\xnn 16進数表現法、nの範囲は0。9、a.fまたはA.F

文字エンコーディング

Rubyのデフォルトの文字セットはASCIIで、文字は1バイトで表現できます。UTFを使用する場合-8 または他の現代の文字セット、文字は1から4バイトで表現されることがあります。

プログラムの先頭で$KCODEを使用して文字セットを変更できます。以下のように:

$KCODE = 'u'

以下は$KCODEが可能な値です。

エンコーディング説明
aASCII (noneと同じ)。デフォルトです。
eEUC。
NNone (ASCIIと同じ)。
uUTF-8。

文字列内蔵メソッド

Stringメソッドを呼び出すためにStringオブジェクトの例が必要です。以下は、Stringオブジェクトを作成する方法の例です:

new [String.new(str="")]

これは、次のとおり含まれる str 新しい文字列オブジェクトのコピー。今や、次のように使用 str オブジェクト、私たちは任意の利用可能なサンプルメソッドを呼び出すことができます。例えば:

オンラインの例

#!/usr/bin/ruby
 
myStr = String.new("THIS IS TEST")
foo = myStr.downcase
 
puts "#{foo}"

这将产生以下结果:

this is test

下面是公共的字符串方法(假设 str 是一个 String 对象):

序号方法 & 描述
1str % arg
使用格式规范格式化字符串。如果 arg 包含一个以上的代替,那么 arg 必须是一个数组。如需了解更多格式规范的信息,请查看"内核模块"下的 sprintf。
2str * integer
返回一个包含 integer 个 str 的新的字符串。换句话说,str 被重复了 integer 次。
3str + other_str
other_strをstrに接続します。
4str << obj
连接一个对象到字符串。如果对象是范围为 0.255 之间的固定数字 Fixnum,则它会被转换为一个字符。把它与 concat 进行比较。
5str <=> other_str
把 str 与 other_str 进行比较,返回 -1(小于)、0(等于)或 1(大于)。比较是区分大小写的。
6str == obj
检查 str 和 obj 的相等性。如果 obj 不是字符串,则返回 false,如果 str <=> obj,则返回 true,返回 0。
7str =~ obj
根据正则表达式模式 obj 匹配 str。返回匹配开始的位置,否则返回 false。
8str[position] # 注意返回的是ASCII码而不是字符
str[start, length]
str[start..end]
str[start...end]

使用索引截取子串
9str.capitalize
把字符串转换为大写字母显示。
10str.capitalize!
与 capitalize 相同,但是 str 会发生变化并返回。
11str.casecmp
不区分大小写的字符串比较。
12str.center
居中字符串。
13str.chomp
从字符串末尾移除记录分隔符($/),通常是 \n。如果没有记录分隔符,则不进行任何操作。
14str.chomp!
与 chomp 相同,但是 str 会发生变化并返回。
15str.chop
strから最後の文字を削除します。
16str.chop!
chopと同じですが、strが変更され、返されます。
17str.concat(other_str)
other_strをstrに接続します。
18str.count(str, ...)
1つまたは複数の文字集合にカウントします。複数の文字集合がある場合、これらの集合の交集合にカウントします。
19str.crypt(other_str)
strに一方向暗号化ハッシュを適用します。引数は、a-z、A-Z、0-9の範囲の2文字の文字列です。9、.または /。
20str.delete(other_str, ...)
strのコピーを返し、引数の交集中のすべての文字が削除されます。
21str.delete!(other_str, ...)
deleteと同じですが、strが変更され、返されます。
22str.downcase
strのコピーを返し、すべての大文字が小文字に置き換えられます。
23str.downcase!
downcaseと同じですが、strが変更され、返されます。
24str.dump
strのバージョンを返し、すべての非表示文字は\nnnシンボルで置き換えられ、すべての特殊文字はエスケープされます。
25str.each(separator=$/) { |substr| block }
パラメータを使用してレコード区切り文字(デフォルトは$/)でstrを区切って、各サブストリングを提供されたブロックに渡します。
26str.each_byte { |fixnum| block }
strの各バイトをblockに渡し、各バイトを十進数で返します。
27str.each_line(separator=$/) { |substr| block }
パラメータを使用してレコード区切り文字(デフォルトは$/)でstrを区切って、各サブストリングを提供されたblockに渡します。
28str.empty?
strが空(すなわち長さが0)の場合、trueを返します。
29str.eql?(other)
二つの文字列が同じ長さで同じ内容を持っている場合、これらの文字列は等しいです。
30str.gsub(pattern, replacement) [または]
str.gsub(pattern) { |match| block }

strのコピーを返し、patternのすべての発生をreplacementまたはblockの値で置き換えます。patternは通常正規表現Regexpですが、文字列Stringの場合は正規表現の特殊文字は解釈されません(つまり、/\d/ 数字を一致させるが、'\d'は反斜杠の後に'd'を一致させます。)
31str[fixnum] [または] str[fixnum,fixnum] [または] str[range] [または] str[regexp] [または] str[regexp, fixnum] [または] str[other_str]
以下のパラメータを使用してstrを参照します:引数がFixnumの場合、fixnumの文字コードを返します;引数が2つのFixnumの場合、偏移(最初のfixnum)から長さ(2つ目のfixnum)までのサブストリングを返します;引数がrangeの場合、その範囲のサブストリングを返します;引数がregexpの場合、一致する文字列の部分を返します;引数がfixnumを持つregexpの場合、fixnum位置の一致データを返します;引数がother_strの場合、other_strに一致するサブストリングを返します。負のFixnumは、文字列の末尾から数えます。 -1 始まり。
32str[fixnum] = fixnum [または] str[fixnum] = new_str [または] str[fixnum, fixnum] = new_str [または] str[range] = aString [または] str[regexp] = new_str [または] str[regexp, fixnum] = new_str [または] str[other_str] = new_str ]
整个字符串または部分字符串を置換します。slice!と同義です。
33str.gsub!(pattern, replacement) [または] str.gsub!(pattern) { |match| block }
String#gsubの置換を実行し、strを返します。置換が実行されなかった場合、nilを返します。
34str.hash
文字列の長さと内容に基づくハッシュを返します。
35str.hex
strの先頭の文字を16進数の文字列(オプションのシンボルとオプションの0x)として取り、対応する数字を返します。エラーが発生した場合、0を返します。
36str.include?(other_str) [または] str.include?(fixnum)
strが指定された文字列または文字を含んでいる場合、trueを返します。
37str.index(substring [, offset]) [or]
str.index(fixnum [, offset]) [or]
str.index(regexp [, offset])

指定されたサブストリング、文字(fixnum)またはパターン(regexp)がstrの中で最初に現れるインデックスを返します。見つからない場合はnilを返します。二つ目の引数が提供された場合、strの中で検索を開始する位置を指定します。
38str.insert(index, other_str)
指定されたインデックスの文字の前にother_strを挿入し、strを変更します。負のインデックスは文字列の末尾から数えます。指定された文字の後ろに挿入する意図です。
39str.inspect
strのプリント可能なバージョンを返します。エスケープされた特殊文字を含みます。
40str.intern [or] str.to_sym
strに対応するシンボルを返します。以前に存在しない場合は、シンボルを作成します。
41str.length
strの長さを返します。それをsizeと比較します。
42str.ljust(integer, padstr=' ')
integerがstrの長さを超える場合、strを左揃えにしてpadstrで埋めた長さがintegerの新しい文字列を返します。そうでない場合、strを返します。
43str.lstrip
strのコピーを返します。先頭のスペースを取り除きます。
44str.lstrip!
strから先頭のスペースを取り除きます。変更がない場合はnilを返します。
45str.match(pattern)
patternが正規表現でない場合、patternを正規表現Regexpに変換し、それをstr上でマッチングメソッドを呼び出します。
46str.oct
strの先頭の文字を10進数の文字列(オプションの符号)として読み取り、対応する数字を返します。変換に失敗すると0を返します。
47str.replace(other_str)
strの中の内容をother_strの中の対応する値に置き換えます。
48str.reverse
新しい文字列を返します。新しい文字列はstrの逆序です。
49str.reverse!
strを逆転し、strが変更され、返されます。
50str.rindex(substring [, fixnum]) [or]
str.rindex(fixnum [, fixnum]) [or]
str.rindex(regexp [, fixnum])

str中の指定された子文字列、文字(fixnum)またはパターン(regexp)の最後のインデックスを返します。見つからない場合、nilを返します。二つ目の引数が提供された場合、検索を終了する位置を指定します。そのポイントを超えた文字は考慮されません。
51str.rjust(integer, padstr=' ')
integerがstrの長さよりも大きい場合、integerの長さの新しい文字列を返します。新しい文字列はstrの右側に揃えられ、padstrで埋められます。それ以外の場合、strを返します。
52str.rstrip
strのコピーを返し、末尾のスペースを取り除きます。
53str.rstrip!
strの末尾のスペースを取り除き、変更がなければnilを返します。
54str.scan(pattern) [または]
str.scan(pattern) { |match, ...| block }

pattern(正規表現Regexpまたは文字列String)に一致するstrを遍历します。各一致に対して、結果が生成され、結果配列に追加されたりblockに渡されます。patternにグループが含まれていない場合、各独立の結果は一致する文字列、$&で構成されます。patternにグループが含まれている場合、各独立の結果は各グループエントリを含む配列です。
55str.slice(fixnum) [または] str.slice(fixnum, fixnum) [または]
str.slice(range) [または] str.slice(regexp) [または]
str.slice(regexp, fixnum) [または] str.slice(other_str)
See str[fixnum], etc.
str.slice!(fixnum) [または] str.slice!(fixnum, fixnum) [または] str.slice!(range) [または] str.slice!(regexp) [または] str.slice!(other_str)

指定の部分をstrから削除し、削除された部分を返します。値が範囲外の場合、Fixnum形式の引数が渡されるとIndexErrorが生成されます。range形式の引数が渡されるとRangeErrorが生成されます。RegexpやString形式の引数が渡されると、実行動作を無視します。
56str.split(pattern=$;, [limit])

strを区切り文字に基づいて分割し、これらのサブストリングの配列を返します。

base 正則表現Regexpの場合、strはpatternに一致する場所で分割されます。patternがゼロ長度の文字列に一致する場合、strは単一の文字に分割されます。 分割するstrに使用されます。

base 正則表現Regexpの場合、strはpatternに一致する場所で分割されます。patternがゼロ長度の文字列に一致する場合、strは単一の文字に分割されます。  Stringの場合、分割するstrで使用されます。patternが単一のスペースの場合、strはスペースに基づいて分割され、先頭のスペースと連続するスペースは無視されます。

パラメータが使用されます。$;の値がnil(デフォルト)の場合、strはスペースに基づいて分割され、` `が指定されたかのようになります。 正則表現Regexpの場合、strはpatternに一致する場所で分割されます。patternがゼロ長度の文字列に一致する場合、strは単一の文字に分割されます。 pattern

パラメータが使用されます。$;の値がnil(デフォルト)の場合、strはスペースに基づいて分割され、` `が指定されたかのようになります。 省略すると、 limit 1フィールド数に制限があり、limitが負数の場合、フィールドの数に制限はなく、末尾のnullフィールドを抑制しません。

57str.squeeze([other_str]*)
other_strパラメータを使用して、String#countで説明されるプロセスから文字列のシリーズを作成します。同じ文字が集合に出现する場合、それが単一の文字に置き換えられます。パラメータが指定されていない場合、すべての同じ文字が単一の文字に置き換えられます。
58str.squeeze!([other_str]*)
squeezeと同じですが、strが変更されるとともに返され、変更がなければnilを返します。
59str.strip
strのコピーを返し、先頭のスペースと末尾のスペースを取り除きます。
60str.strip!
strから先頭のスペースと末尾のスペースを取り除き、変更がなければnilを返します。
61str.sub(pattern, replacement) [or]
str.sub(pattern) { |match| block }

strのコピーを返し、patternの最初の出現がreplacementまたはblockの値に置き換えられます。patternは通常正則表現Regexpですが、Stringの場合は正則表現のメタ文字は解釈されません。
62str.sub!(pattern, replacement) [or]
str.sub!(pattern) { |match| block }

String#subで置き換えを実行し、strを返します。置き換えが実行されない場合、nilが返されます。
63str.succ [または] str.next
strの継承を返します。
64str.succ! [または] str.next!
String#succと同等ですが、strが変更されると返り値が変わり、変更されなければnilが返されます。
65str.sum(n=16)
str中の文字のn-bitチェックサムで、nはオプションのFixnumパラメータで、デフォルトでは 16のビットチェックサム、nはオプションのFixnumパラメータで、デフォルトでは 2N - 1 の和を返します。これは特に良いハッシュ値ではありません。
66str.swapcase
strのコピーを返し、すべての大文字を小文字に、すべての小文字を大文字に変換します。
67str.swapcase!
String#swapcaseと同等ですが、strが変更されると返り値が変わり、変更されなければnilが返されます。
68str.to_f
strを先頭の文字で浮点数に解釈し、結果を返します。有効数字の末尾に余分な文字がある場合は無視されます。strの先頭に有効数字がない場合、0.0が返されます。このメソッドは例外を生成しません。
69str.to_i(base=10)
strを先頭の文字で整数の基数(基数は 2および 8および 10 または 16の結果は、有効数字の末尾に余分な文字がある場合は無視されます。strの先頭に有効数字がない場合、0が返されます。このメソッドは例外を生成しません。
70str.to_s [または] str.to_str
受け取った値を返します。
71str.tr(from_str, to_str)
strのコピーを返し、from_strの文字をto_strの対応する文字に置き換えます。to_strがfrom_strより短い場合、最後の文字で埋められます。両方の文字列でcを使用できます。1.c2 文字の範囲を示す記号です。from_strが^で始まる場合、リストに列挙された文字以外の全ての文字を示します。
72str.tr!(from_str, to_str)
String#trと同等ですが、strが変更されると返り値が変わり、変更されなければnilが返されます。
73str.tr_s(from_str, to_str)
strをString#trで指定されたルールに従って処理し、翻訳に影響を与える重複文字を取り除きます。
74str.tr_s!(from_str, to_str)
String#tr_s に相当しますが、str は変更され、返されます。変更がない場合は nil を返します。
75str.unpack(format)
フォーマット文字列に基づいて str をデコードします(バイナリデータを含む可能性があります)。抽出された各値の配列を返します。フォーマット文字は一連の単文字指令で構成されています。各指令の後には数字が続くことがあります。その指令を繰り返す回数を示します。星号(*)はすべての残りの要素を使用します。コマンド sSiIlL の後にはアンダースコア (_) が追加されることがあります。指定されたタイプに対応するローカルプラットフォームのサイズを使用します。プラットフォームに依存しない一貫したサイズを使用する場合は、それを使用します。フォーマット文字列のスペースは無視されます。
76str.upcase
str のコピーを返します。すべての小文字は大文字に置き換わります。操作は環境依存せず、a から z の文字のみに影響を与えます。
77str.upcase!
str の内容を大文字に変換します。変更がない場合は nil を返します。
78str.upto(other_str) { |s| block }
連続した値を巡ります。str から始まり other_str まで(含む)で、各値を block に交互に渡します。String#succ メソッドを使用して各値を生成します。

文字列 unpack コマンド

以下のテーブルは String#unpack メソッドの解凍コマンドを示しています。

コマンド返します説明
AString末尾の null と空格を削除します。
aString文字列。
BString各文字からビットを抽出します(最初に最高位のビットが先)。
bString各文字からビットを抽出します(最初に最低位のビットが先)。
CFixnum文字を無符号整数として抽出します。
cFixnum文字を整数として抽出します。
D, dFloatsizeof(double) 長さの文字をオリジナルの double として扱います。
EFloatsizeof(double) 長さの文字を littleendian バイトオーダーの double として扱います。
eFloatsizeof(float) 長さの文字を littleendian バイトオーダーの float として扱います。
F, fFloatsizeof(float) 長さの文字をオリジナルの float として扱います。
GFloatsizeof(double) 長さの文字を network バイトオーダーの double として扱います。
gFloatsizeof(float) 長さの文字を network バイトオーダーの float として扱います。
HString从每个字符中提取十六进制(首先是最高有效位)。
hString各文字から十六進数を抽出(最初に最高位のものから)。
hInteger各文字から十六進数を抽出(最初に最低位のものから)。
IIntegersizeof(int)の長さ(_を通じて変更)の連続した文字をオリジナルのintegerとして読み込みます。
iIntegersizeof(int)の長さ(_を通じて変更)の連続した文字を符号付きのオリジナルのintegerとして読み込みます。
LInteger四文字(_を通じて変更)を連続して無符号のオリジナルのlong integerとして読み込みます。
lString四文字(_を通じて変更)を連続して符号付きのオリジナルのlong integerとして読み込みます。
MString印刷可能な参照を。64 m
BaseIntegerエンコード。
NFixnum四文字をネットワークバイトオーダーの無符号のlongとして読み込みます。
nString)の長さの文字をポインタとして、参照位置から\emph{len}文字を返します。 *)の長さの文字をネットワークバイトオーダーの無符号のshortとして読み込みます。
pString)の長さの文字をポインタとして、参照位置から\emph{len}文字を返します。 *sizeof(char
)の長さの文字を空終了キャラクタのポインタとして。Integer八文字を無符号のquad wordとして読み込みます。64 ビット)。
qInteger八文字を符号付きquad wordとして読み込みます。64 ビット)。
SFixnum二文字(_を使用する場合、異なる)を連続してnativeバイトオーダーの無符号のshortとして読み込みます。
sFixnum二文字(_を使用する場合、異なる)を連続してnativeバイトオーダーの符号付きshortとして読み込みます。
UIntegerUTF-8 文字、無符号の整数として。
uStringUUエンコード。
VFixnum四文字をlittle-endianバイトオーダーの無符号のlong。
vFixnum二文字をlittle-endianバイトオーダーの無符号のshort。
wIntegerBER圧縮の整数。
X 後に一文字をスキップします。
x 前に一文字をスキップします。
ZStringと * 一緒に使用して、最初のnullまでの末尾のnullを取り除きます。
@ lengthパラメータで指定されたオフセット量をスキップします。

オンラインの例

試してみる例を、様々なデータを解凍します。

"abc \0\0abc \0\0".unpack('A6Z6')   #=> ["abc", "abc "]
"abc \0\0".unpack('a3a3')           #=> ["abc", " \000\000"]
"abc \0abc \0".unpack('Z')*Z*
"aa".unpack('b')8B810000110", "01100001"]
"aaa".unpack('h')2H2c') => ['"']16", "61" 97]
"\xfe\xff\xfe\xff".unpack('sS') => [-2, 65534]
"now=20is".unpack('M')*
"whole".unpack('xax') => ['now is']2aX2aX1aX2a') => ['h', 'e', 'l', 'l', 'o']