ルビ文字列


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 的字符串可以使用 '' 和 ""。

エスケープ文字

添え字は、エスケープ文字または非印刷文字をリストします。二重引用符で囲まれた場合、エスケープ文字は解析されます。一重引用符で囲まれた文字列では、エスケープ文字は解析されず、そのまま出力されます。
$KCODE = 'u'
バックスラッシュ記号16進数文字説明
a0x07アラーム記号
b0x08Backspaceキー
cx Control-x
C-xControl-x
e0x1bエスケープ文字
f0x 0cフォームフィード
M-C-x メタコントロール-x
n0x0a改行
nnn8進表記、nは0.7の範囲内です
r0x0d 記号を入力してください
s 0x20スペース文字
t0x09タブ文字
v0x0b垂直タブ文字
x キャラクター×
を表現します。 UTF-8 またはその他の最新の文字セットを使用する場合、文字は 1 ~ 4 バイトで表される場合があります。 次のようにプログラムの先頭で $KCODE を使用して文字セットを変更できます: $KCODE に使用できる値は次のとおりです。

エンコーディング

説明

a

ASCII (なしと同じ)。これがデフォルトです。
eEUC。
nなし (ASCII と同じ)。
uUTF-8。

String 組み込みメソッド

String メソッドを呼び出すには、String オブジェクトのインスタンスが必要です。 String オブジェクトのインスタンスを作成する方法は次のとおりです:

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

これは、str のコピーを含む新しい String オブジェクトを返します。これで、str オブジェクトを使用して、利用可能なインスタンス メソッドのいずれかを呼び出すことができます。例:

#!/usr/bin/ruby

myStr = String.new("THIS IS TEST")
foo = myStr.downcase

puts "#{foo}"

これにより、次の結果が生成されます:

this is test

パブリック文字列メソッドを次に示します(strがStringオブジェクトであると仮定します):

52str.rstrip53str.rstrip!54str.scan(pattern) [or]55strから指定された部分を削除し、削除された部分を返します。値が範囲外で、パラメーターが Fixnum 形式をとる場合は、IndexError が生成されます。パラメータが範囲形式の場合、RangeError が生成されます。パラメータが正規表現および文字列形式の場合、実行アクションは無視されます。 patternが文字列の場合、strを分割する際の区切り文字として使用されます。 pattern が単一の空白の場合、str は空白に基づいて分割され、先頭の空白と連続する空白文字は無視されます。 62636465666768697071
シリアル番号メソッドと説明
1str % arg
フォーマット指定を使用して文字列をフォーマットします。 arg に複数の置換が含まれる場合、arg は配列でなければなりません。形式仕様の詳細については、「カーネル モジュール」の sprintf を参照してください。
2str * integer
整数の str を含む新しい文字列を返します。つまり、str は整数回繰り返されます。
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 を返します。
8
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に適用します。引数は 2 文字の文字列で、各文字は a.z、A.Z、0.9、.、または / の範囲内にあります。
20str.delete(other_str, ...)
引数の交差部分にあるすべての文字を削除した str のコピーを返します。
21str.delete!(other_str, ...)
deleteと同じですが、strを変更して返します。
22str.downcase
すべての大文字を小文字に置き換えた str のコピーを返します。
23str.downcase!
downcaseと同じですが、strが変更されて返されます。
24str.dump
すべての非印刷文字を nnn 記号に置き換え、すべての特殊文字をエスケープしたバージョンの str を返します。
25str.each(separator=$/) { |substr| block }
引数をレコード区切り文字として使用して str を分割し (デフォルトは $/)、各部分文字列を指定された block に渡します。
26str.each_byte { |fixnum| block }
str の各バイトを block に渡し、バイトの 10 進数表現で各バイトを返します。
27 str.each_line(separator=$/) { |substr| block }
パラメータをレコード区切り文字として使用して str を分割し (デフォルトは $/)、各部分文字列を指定された block に渡します。
28str.empty?
str が空の場合 (つまり、長さが 0 の場合)、true を返します。
29str.eql?(other)
2 つの文字列は、長さと内容が同じであれば等しいです。
30str.gsub(pattern, replace) [or]
str.gsub(pattern) { |match| block }

すべての pattern を置換値またはブロック値に置き換えた str のコピーを返します。 。 pattern は通常、正規表現 Regexp です。文字列の場合、正規表現メタキャラクタは解釈されません (つまり、/d/ は数字に一致しますが、'd' はバックスラッシュの後に 'd ' が続くものに一致します)。
31str[fixnum] [or] str[fixnum,fixnum] [or] str[range] [or] str[regexp] [or] str[regexp, fixnum] [or] str[other_str ]
次のパラメータを使用して str を参照します。パラメータが 1 Fixnum の場合は、fixnum の文字エンコーディングが返されます。パラメータが 2 Fixnum の場合は、オフセット (最初の fixnum) から始まり で終わる文字列が返されます。 length (2 番目の fixnum) は範囲までの部分文字列を返します。パラメータが range の場合は範囲​​内の部分文字列が返され、パラメータが regexp の場合は一致する文字列の一部が返されます。 fixnum の場合は、fixnum の位置で一致するデータが返され、パラメータが other_str の場合は、other_str に一致する部分文字列が返されます。負の Fixnum は、文字列の末尾から -1 から始まります。
32str[fixnum] = fixnum [or] str[fixnum] = new_str [or] str[fixnum, fixnum] = new_str [or] str[range] = aString [or] str[regexp] =new_str [または] str[regexp, fixnum] =new_str [または] str[other_str] = new_str ]
文字列全体または文字列の一部を置き換えます。スライスと同義です!
33str.gsub!(pattern, replace) [or] str.gsub!(pattern) { |match| block }
String#gsub の置換を実行し、置換がない場合は str を返します。実行された場合は nil を返します。
34str.hash
文字列の長さと内容に基づいてハッシュを返します。
35str.hex
str の先頭文字を 16 進数の文字列 (オプションの記号とオプションの 0x) として扱い、対応する数値を返します。エラーが発生した場合はゼロを返します。
36str.include?other_str [or] str.include?fixnum
str に指定された文字列または文字が含まれている場合に true を返します。
37str.index(substring [, offset]) [or]
str.index(fixnum [, offset]) [or]
str.index(regexp [, offset])

に戻るstr 内で最初に出現するステーター文字列、文字 (fixnum)、またはパターン (regexp) のインデックス。見つからない場合は nil を返します。 2 番目の引数が指定された場合は、検索を開始する文字列内の位置を指定します。
38str.insert(index, other_str)
指定されたインデックスの文字の前にother_strを挿入し、strを変更します。負のインデックスは文字列の末尾からカウントされ、指定された文字の後に挿入されます。その目的は、指定されたインデックスから始まる文字列を挿入することです。
39str.inspect
エスケープされた特殊文字を含む印刷可能なバージョンの str を返します。
40str.intern [or] str.to_sym
str に対応するシンボルを返すか、以前に存在しない場合はシンボルを作成します。
41str.length
str の長さを返します。大きさと比べてみましょう。
42str.ljust(integer,padstr=' ')
integer が str の長さより大きい場合、integer の長さの新しい文字列を返します。新しい文字列は str と左揃えになります。詰め物としてpadstr。それ以外の場合は、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が変化して戻ります。戻ります。 str 内のステーター文字列、文字 (fixnum)、またはパターン (regexp) が最後に出現するインデックス。見つからない場合は nil を返します。 2 番目の引数が指定された場合は、検索を終了する文字列内の位置を指定します。この時点を超える文字は考慮されません。
51str.rjust(integer, Padstr=' ')

integer が str の長さより大きい場合、integer の長さの新しい文字列を返します。新しい文字列は str と右揃えになります。詰め物としてpadstr。それ以外の場合は、str が返されます。

末尾のスペースを削除した str のコピーを返します。
str から末尾のスペースを削除するか、変更がない場合は nil を返します。
str.scan(pattern) { |match, ...| block } 2 つの形式の一致パターン (正規表現 Regexp または A を使用できます) string String) は str を反復処理します。一致するたびに結果が生成され、結果配列に追加されるか、ブロックに渡されます。パターンにグループ化が含まれていない場合、個々の結果は一致した文字列 $& で構成されます。パターンにグループが含まれている場合、個々の結果は、各グループのエントリを含む配列になります。
str.slice(fixnum) [または] str.slice(fixnum, fixnum) [または]str.slice(range) [または] str.slice(regexp) [または]
str. lice(regexp, fixnum) [or] str.slice(other_str)
str[fixnum] などを参照
str.slice!(fixnum) [or] str.slice!(fixnum, fixnum) [or] str.slice!(range) [または] str.slice!(regexp) [または] str.slice!(other_str)
56

str.split(pattern=$;, [limit])

区切り文字に基づいて str を部分文字列に分割し、これらの部分文字列の配列を返します。
pattern が正規表現 Regexp の場合、パターンが一致する場所で str が分割されます。 pattern が長さ 1 の文字列と一致する場合、str は個々の文字に分割されます。

pattern パラメータが省略された場合は、$ の値が使用されます。 $; が nil (デフォルト) の場合、` ` が区切り文字として指定されたかのように、str は空白で分割されます。

limitパラメータが省略された場合、後続のnullフィールドは抑制されます。 limit が正の数の場合、その数までのフィールドが返されます (limit が 1 の場合、文字列全体が配列内の唯一のエントリとして返されます)。 limit が負の数の場合、返されるフィールドの数は無制限になり、後続の null フィールドは抑制されません。

57str.squeeze([other_str]*)
String#count で説明されている手順を使用して、other_str 引数から文字のシーケンスを構築します。セット内に出現する同一の文字を 1 つの文字に置き換えた新しい文字列を返します。引数が指定されていない場合は、すべての同一の文字が 1 つの文字に置き換えられます。
58str.squeeze!([other_str]*)
squeeze と同じですが、 str は変更されて返されます。変更がない場合は nil が返されます。
59str.strip
先頭と末尾のスペースを削除した str のコピーを返します。
60str.strip!
str から先頭と末尾のスペースを削除するか、変更がない場合は nil を返します。
61str.sub(pattern, replace) [or]
str.sub(pattern) { |match| block }

str のコピーを返します。最初に出現した pattern は replace に置き換えられます。またはブロックの値。 pattern は通常、正規表現 Regexp です。文字列の場合、正規表現メタ文字は解釈されません。
str.sub!(pattern, replace) [or]str.sub!(pattern) { |match| block }
String#sub の置換を実行し、置換がない場合は str を返します。 、実行すると nil を返します。
str.succ [or] str.next str の継承を返します。
str.succ! [or] str.next! String#succ と同等ですが、str が変更されて返されます。
str.sum(n=16) str 内の文字の n ビット チェックサムを返します。n はオプションの Fixnum パラメータで、デフォルトは 16 です。結果は、str の各文字のバイナリ値の単純な合計 (2n - 1 を法とする) です。これは特に良好なチェックサムではありません。
str.swapcaseすべての大文字を小文字に変換し、すべての小文字を大文字に変換した str のコピーを返します。
str.swapcase!はString#swapcaseと同等ですが、strは変化して戻ります。変化がない場合はnilを返します。
str.to_f str の先頭文字を浮動小数点数として解釈した結果を返します。有効な数字の末尾を超える余分な文字は無視されます。 str の先頭に有効な数字がない場合は、0.0 が返されます。このメソッドは例外を生成しません。
str.to_i(base=10) str の先頭文字を整数の基数 (基数 2、8、10、または 16) として解釈した結果を返します。有効な数字の末尾を超える余分な文字は無視されます。 str の先頭に有効な数字がない場合は、0 が返されます。このメソッドは例外を生成しません。
str.to_s [or] str.to_str受け取った値を返します。
str.tr(from_str, to_str)from_str の文字を to_str の対応する文字に置き換えて、str のコピーを返します。 to_str が from_str より短い場合は、最後の文字に埋め込まれます。どちらの文字列も、c1.c2 表記を使用して文字の範囲を表すことができます。 from_str が ^ で始まる場合、リストされているものを除くすべての文字を意味します。
72str.tr!(from_str, to_str)
はString#trと同等ですが、strは変化して戻ります、変化がない場合はnilを返します。
73str.tr_s(from_str, to_str)
String#tr で記述されたルールに従って str を処理し、翻訳に影響する繰り返し文字を削除します。
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 で終わる連続する値を走査し、各値を順番にブロックに渡します。各値の生成には String#succ メソッドが使用されます。

文字列のアンパック命令

次の表に、String#unpack メソッドのアンパック命令を示します。

コマンド は、末尾の null とスペースが削除された 説明
AString を返します。
a文字列文字列。
BString 各文字からビットを抽出します (最上位ビットが最初)。
bString 各文字からビットを抽出します (最下位ビットが最初)。
CFixnum 文字を符号なし整数として抽出します。
cFixnum 文字を整数として抽出します。
D、dFloatは、sizeof(double) の長さの文字をネイティブ double として扱います。
EFloatは、sizeof(double) の長さの文字をリトルエンディアンのバイトオーダーで double として扱います。
eFloatは、sizeof(float) の長さの文字をリトルエンディアンのバイトオーダーの浮動小数点として扱います。
F、fFloatは、sizeof(float) の長さの文字をネイティブ float として扱います。
GFloatは、sizeof(double) の長さの文字をネットワークバイトオーダーの double として扱います。
gFloatは、sizeof(float) の長さの文字をネットワークバイトオーダー浮動小数点として扱います。
HString 各文字から 16 進数を抽出します (最上位ビットが最初)。
hString 各文字から 16 進数を抽出します (最下位ビットが最初)。
IInteger は、sizeof(int) 長さ (_ で変更) の連続した文字をネイティブ整数として扱います。
iInteger は、 sizeof(int) 長さ ( _ で変更) の連続する文字を符号付きネイティブ整数として扱います。
LInteger 4 つの (_ で修飾された) 連続する文字を符号なしネイティブ長整数として扱います。
lInteger 4 つの (_ で修飾された) 連続する文字を符号付きネイティブ長整数として扱います。
M文字列引用文を印刷可能。
mStringBase64 エンコーディング。
NInteger は、ネットワーク バイト オーダーで 4 文字を unsigned long として扱います。
nFixnum 2 つの文字をネットワーク バイト オーダーの unsigned short として扱います。
PStringは、sizeof(char *) 文字をポインタとして扱い、参照された位置からemph{len}文字を返します。
pStringは、sizeof(char *) 文字をヌル終了文字へのポインタとして扱います。
QInteger は、8 文字を符号なしクワッドワード (64 ビット) として扱います。
qInteger は、8 文字を符号付きクワッドワード (64 ビット) として扱います。
SFixnum 2 つの連続する文字 (_ が使用されている場合は異なります) をネイティブ バイト オーダーの unsigned short として扱います。
sFixnum 2 つの連続する文字 (_ が使用されている場合は異なります) をネイティブ バイト オーダーの signed short として扱います。
UIntegerUTF-8 文字を符号なし整数として表します。
uStringUUエンコーディング。
VFixnum は、リトルエンディアンのバイトオーダーで 4 文字を unsigned long として扱います。
vFixnum 2 つの文字をリトルエンディアンのバイトオーダーの unsigned short として扱います。
wIntegerBER 圧縮された整数。
X 1 文字前にスキップします。
x 1 文字スキップします。
ZString * と一緒に使用して、最初の null までの末尾の null を削除します。
@ length パラメータで指定されたオフセットをスキップします。

次の例を試して、さまざまなデータを解凍してください。

りー