Ruby-文字列

RubyのStringオブジェクトは、通常、人間の言語を表す文字を表す1バイト以上の任意のシーケンスを保持および操作します。

最も単純な文字列リテラルは一重引用符(アポストロフィ文字)で囲まれています。引用符内のテキストは文字列の値です-

'This is a simple Ruby string literal'

一重引用符で囲まれた文字列リテラル内にアポストロフィを配置する必要がある場合は、その前にバックスラッシュを付けて、Rubyインタプリタが文字列を終了したと見なさないようにします。

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

バックスラッシュは、別のバックスラッシュをエスケープするためにも機能するため、2番目のバックスラッシュ自体はエスケープ文字として解釈されません。

以下は、Rubyの文字列関連の機能です。

式の置換

式の置換は、#{および} −を使用してRuby式の値を文字列に埋め込む手段です。

#!/usr/bin/ruby

x, y, z = 12, 36, 72
puts "The value of x is #{ x }."
puts "The sum of x and y is #{ x + y }."
puts "The average was #{ (x + y + z)/3 }."

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

The value of x is 12.
The sum of x and y is 48.
The average was 40.

一般的な区切り文字列

一般的な区切り文字列を使用すると、任意の区切り文字を使用して、一致するペア内に文字列を作成できます。たとえば、!、(、{、<など、先頭にパーセント文字(%)が付きます。Q、q、およびxには特別な意味があります。 。一般的な区切り文字列は次のようになります-

%{Ruby is fun.}  equivalent to "Ruby is fun."
%Q{ Ruby is fun. } equivalent to " Ruby is fun. "
%q[Ruby is fun.]  equivalent to a single-quoted string
%x!ls! equivalent to back tick command output `ls`

エスケープ文字

NOTE−二重引用符で囲まれた文字列では、エスケープ文字が解釈されます。一重引用符で囲まれた文字列では、エスケープ文字が保持されます。

バックスラッシュ表記 16進文字 説明
\ a 0x07 ベルまたはアラート
\ b 0x08 バックスペース
\ cx   Control-x
\ Cx   Control-x
\ e 0x1b 逃れる
\ f 0x0c フォームフィード
\ M- \ Cx   Meta-Control-x
\ n 0x0a 改行
\ nnn   nが0.7の範囲にある8進表記
\ r 0x0d キャリッジリターン
\ s 0x20 スペース
\ t 0x09 タブ
\ v 0x0b 垂直タブ
\バツ   文字x
\ xnn   nが0.9、af、またはAFの範囲にある16進表記

文字コード

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

プログラムの開始時に$ KCODEを使用して、次のように文字セットを変更できます。

$KCODE = 'u'
シニア番号 コードと説明
1

a

ASCII(なしと同じ)。これがデフォルトです。

2

e

EUC。

3

n

なし(ASCIIと同じ)。

4

u

UTF-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
シニア番号 方法と説明
1

str % arg

フォーマット仕様を使用して文字列をフォーマットします。複数の置換が含まれている場合、argは配列である必要があります。フォーマット仕様については、「カーネルモジュール」のsprintfを参照してください。

2

str * integer

strの整数倍を含む新しい文字列を返します。言い換えれば、strは繰り返される整数imesです。

3

str + other_str

other_strをstrに連結します。

4

str << obj

オブジェクトをstrに連結します。オブジェクトが0.255の範囲のFixnumである場合、文字に変換されます。concatと比較してください。

5

str <=> other_str

strをother_strと比較し、-1(より小さい)、0(等しい)、または1(より大きい)を返します。比較では大文字と小文字が区別されます。

6

str == obj

strとobjが等しいかどうかをテストします。objが文字列でない場合、falseを返します。str <=> objが0を返す場合はtrueを返します。

7

str =~ obj

strを正規表現パターンobjと照合します。試合が始まる位置を返します。それ以外の場合はfalse。

8

str.capitalize

文字列を大文字にします。

9

str.capitalize!

大文字と同じですが、変更が加えられます。

10

str.casecmp

文字列の大文字と小文字を区別しない比較を行います。

11

str.center

文字列を中央揃えにします。

12

str.chomp

文字列の末尾からレコード区切り文字($ /)(通常は\ n)を削除します。レコード区切り文字が存在しない場合、何もしません。

13

str.chomp!

chompと同じですが、変更が加えられています。

14

str.chop

strの最後の文字を削除します。

15

str.chop!

チョップと同じですが、変更が加えられています。

16

str.concat(other_str)

other_strをstrに連結します。

17

str.count(str, ...)

1つ以上の文字セットをカウントします。文字のセットが複数ある場合は、それらのセットの共通部分をカウントします

18

str.crypt(other_str)

一方向の暗号化ハッシュをstrに適用します。引数はソルト文字列で、長さは2文字で、各文字はaz、AZ、0.9、の範囲にあります。または/。

19

str.delete(other_str, ...)

引数の交点にあるすべての文字が削除されたstrのコピーを返します。

20

str.delete!(other_str, ...)

削除と同じですが、変更が加えられます。

21

str.downcase

すべて大文字を小文字に置き換えたstrのコピーを返します。

22

str.downcase!

ダウンケースと同じですが、変更が加えられます。

23

str.dump

印刷されないすべての文字が\ nnn表記に置き換えられ、すべての特殊文字がエスケープされたバージョンのstrを返します。

24

str.each(separator = $/) { |substr| block }

引数をレコード区切り文字(デフォルトでは$ /)として使用してstrを分割し、各部分文字列を指定されたブロックに渡します。

25

str.each_byte { |fixnum| block }

strからブロックに各バイトを渡し、各バイトをバイトの10進表現として返します。

26

str.each_line(separator=$/) { |substr| block }

引数をレコード区切り文字(デフォルトでは$ /)として使用してstrを分割し、各部分文字列を指定されたブロックに渡します。

27

str.empty?

strが空の場合(長さがゼロの場合)はtrueを返します。

28

str.eql?(other)

2つの文字列は、長さと内容が同じであれば同じです。

29

str.gsub(pattern, replacement) [or]

str.gsub(pattern) { |match| block }

パターンのすべての出現が置換またはブロックの値のいずれかで置き換えられたstrのコピーを返します。パターンは通常、正規表現になります。文字列の場合、正規表現のメタ文字は解釈されません(つまり、/ \ d /は数字と一致しますが、「\ d」は円記号とそれに続く「d」と一致します)

30

str[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)から長さ(2番目のfixnum)までの部分文字列を返します。range、範囲内の部分文字列を返します。正規表現は、一致した文字列の一部を返します。fixnumを使用した正規表現。fixnumで一致したデータを返します。other_strは、other_strに一致する部分文字列を返します。負のFixnumは、文字列の末尾の-1から始まります。

31

str[fixnum] = fixnum [or] str[fixnum] = new_str [or] str[fixnum, fixnum] = new_str [or] str[range] = aString [or] str[regexp] = new_str [or] str[regexp, fixnum] = new_str [or] str[other_str] = new_str ]

文字列の全部または一部を置換(割り当て)します。スライスの同義語!

32

str.gsub!(pattern, replacement) [or] str.gsub!(pattern) { |match|block }

String#gsubの置換を実行し、置換が実行されなかった場合はstrまたはnilを返します。

33

str.hash

文字列の長さと内容に基づいてハッシュを返します。

34

str.hex

strの先頭の文字を16進数の文字列(オプションの記号とオプションの0xを含む)として扱い、対応する数値を返します。エラーの場合はゼロが返されます。

35

str.include? other_str [or] str.include? fixnum

strに指定された文字列または文字が含まれている場合、trueを返します。

36

str.index(substring [, offset]) [or]

str.index(fixnum [, offset]) [or]

str.index(regexp [, offset])

strで指定された部分文字列、文字(fixnum)、またはパターン(regexp)が最初に出現するインデックスを返します。見つからない場合はnilを返します。2番目のパラメーターが存在する場合は、検索を開始する文字列内の位置を指定します。

37

str.insert(index, other_str)

指定されたインデックスの文字の前にother_strを挿入し、strを変更します。負のインデックスは文字列の末尾から数え、指定された文字の後に挿入します。目的は、指定されたインデックスから始まるように文字列を挿入することです。

38

str.inspect

特殊文字をエスケープした、印刷可能なバージョンのstrを返します。

39

str.intern [or] str.to_sym

strに対応するシンボルを返し、以前に存在していなかった場合はシンボルを作成します。

40

str.length

strの長さを返します。サイズを比較します。

41

str.ljust(integer, padstr = ' ')

integerがstrの長さより大きい場合、strが左寄せされ、padstrが埋め込まれた長さintegerの新しい文字列を返します。それ以外の場合は、strを返します。

42

str.lstrip

先頭の空白を削除したstrのコピーを返します。

43

str.lstrip!

strから先頭の空白を削除し、変更が行われなかった場合はnilを返します。

44

str.match(pattern)

パターンを正規表現に変換し(まだ正規表現になっていない場合)、strでそのmatchメソッドを呼び出します。

45

str.oct

strの先頭文字を8進数の文字列(オプションの記号付き)として扱い、対応する数値を返します。変換が失敗した場合は0を返します。

46

str.replace(other_str)

strの内容と汚染をother_strの対応する値に置き換えます。

47

str.reverse

strの文字を逆の順序で含む新しい文字列を返します。

48

str.reverse!

strを所定の位置に戻します。

49

str.rindex(substring [, fixnum]) [or]

str.rindex(fixnum [, fixnum]) [or]

str.rindex(regexp [, fixnum])

str内の指定された部分文字列、文字(fixnum)、またはパターン(regexp)の最後の出現のインデックスを返します。見つからない場合はnilを返します。2番目のパラメーターが存在する場合、検索を終了する文字列内の位置を指定します。このポイントを超える文字は考慮されません。

50。

str.rjust(integer, padstr = ' ')

整数がstrの長さより大きい場合、strが右寄せされ、padstrが埋め込まれた長さ整数の新しい文字列を返します。それ以外の場合は、strを返します。

51

str.rstrip

末尾の空白が削除されたstrのコピーを返します。

52

str.rstrip!

strから末尾の空白を削除し、変更が行われなかった場合はnilを返します。

53

str.scan(pattern) [or]

str.scan(pattern) { |match, ...| block }

どちらのフォームもstrを反復処理し、パターン(RegexpまたはStringの場合があります)に一致します。一致するたびに、結果が生成され、結果配列に追加されるか、ブロックに渡されます。パターンにグループが含まれていない場合、個々の結果は一致した文字列$&で構成されます。パターンにグループが含まれている場合、個々の結果はそれ自体がグループごとに1つのエントリを含む配列になります。

54

str.slice(fixnum) [or] str.slice(fixnum, fixnum) [or]

str.slice(range) [or] str.slice(regexp) [or]

str.slice(regexp, fixnum) [or] str.slice(other_str)

See str[fixnum], etc.

str.slice!(fixnum) [or] str.slice!(fixnum, fixnum) [or]

str.slice!(range) [or] str.slice!(regexp) [or]

str.slice!(other_str)

指定した部分をstrから削除し、削除した部分を返します。Fixnumをとるフォームは、値が範囲外の場合にIndexErrorを発生させます。RangeフォームはRangeErrorを発生させ、RegexpフォームとStringフォームはサイレントに割り当てを無視します。

55

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

strを区切り文字に基づいて部分文字列に分割し、これらの部分文字列の配列を返します。

patternがStringの場合、strを分割するときにその内容が区切り文字として使用されます。パターンが単一のスペースの場合、strは空白で分割され、先頭の空白と連続する空白文字の実行は無視されます。

patternがRegexpの場合、strはパターンが一致する場所で分割されます。パターンが長さゼロの文字列に一致する場合は常に、strは個々の文字に分割されます。

場合のパターンは、$の値を省略しています。使用されている。$の場合; はnil(デフォルト)であり、strは ``が指定されたかのように空白で分割されます。

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

56

str.squeeze([other_str]*)

String#countで説明されている手順を使用して、other_strパラメーターから文字のセットを作成します。このセットで発生する同じ文字の実行が単一の文字に置き換えられた新しい文字列を返します。引数が指定されていない場合、同一文字のすべての実行は単一の文字に置き換えられます。

57

str.squeeze!([other_str]*)

strを所定の位置に押し込み、strを返すか、変更が加えられていない場合はnilを返します。

58

str.strip

先頭と末尾の空白が削除されたstrのコピーを返します。

59

str.strip!

strから先頭と末尾の空白を削除します。strが変更されていない場合は、nilを返します。

60

str.sub(pattern, replacement) [or]

str.sub(pattern) { |match| block }

パターンの最初の出現が置換またはブロックの値のいずれかで置き換えられたstrのコピーを返します。パターンは通常、正規表現になります。文字列の場合、正規表現のメタ文字は解釈されません。

61

str.sub!(pattern, replacement) [or]

str.sub!(pattern) { |match| block }

String#subの置換を実行し、置換が実行されなかった場合はstrまたはnilを返します。

62

str.succ [or] str.next

後続をstrに返します。

63

str.succ! [or] str.next!

String#succと同等ですが、レシーバーを適切に変更します。

64

str.sum(n = 16)

str内の文字の基本的なnビットチェックサムを返します。nはオプションのFixnumパラメーターで、デフォルトは16です。結果は単純にstrを法とする各文字のバイナリ値の合計です。これは特にありません。良いチェックサム。

65

str.swapcase

大文字のアルファベット文字を小文字に変換し、小文字を大文字に変換したstrのコピーを返します。

66

str.swapcase!

String#swapcaseと同等ですが、レシーバーを所定の位置に変更し、変更が行われなかった場合はstrまたはnilを返します。

67

str.to_f

> strの先頭文字を浮動小数点数として解釈した結果を返します。有効な数値の終わりを超える無関係な文字は無視されます。strの先頭に有効な数値がない場合は、0.0が返されます。このメソッドで例外が発生することはありません。

68

str.to_i(base = 10)

strの先頭文字を整数ベース(基数2、8、10、または16)として解釈した結果を返します。有効な数値の終わりを超える無関係な文字は無視されます。strの先頭に有効な数値がない場合は、0が返されます。このメソッドで例外が発生することはありません。

69

str.to_s [or] str.to_str

受信者を返します。

70

str.tr(from_str, to_str)

from_strの文字がto_strの対応する文字に置き換えられたstrのコピーを返します。to_strがfrom_strより短い場合は、最後の文字が埋め込まれます。どちらの文字列もc1.c2表記を使用して文字の範囲を示し、from_strは^で始まる場合があります。これは、リストされている文字を除くすべての文字を示します。

71

str.tr!(from_str, to_str)

String#trと同じルールを使用して、strをインプレースで変換します。strを返します。変更が加えられていない場合はnilを返します。

72

str.tr_s(from_str, to_str)

String#trで説明されているようにstrのコピーを処理してから、変換の影響を受けた領域で重複する文字を削除します。

73

str.tr_s!(from_str, to_str)

所定の位置にあるstrに対してString#tr_s処理を実行し、strを返します。変更が行われなかった場合は、nilを返します。

74

str.unpack(format)

>フォーマット文字列に従ってstr(バイナリデータを含む場合があります)をデコードし、抽出された各値の配列を返します。フォーマット文字列は、表18に要約されている、一連の1文字のディレクティブで構成されます。各ディレクティブの後には、このディレクティブで繰り返す回数を示す数字を続けることができます。アスタリスク(*)は、残りのすべての要素を使い果たします。ディレクティブsSiIlLの後には、それぞれアンダースコア(_)を付けて、指定されたタイプの基になるプラットフォームのネイティブサイズを使用できます。それ以外の場合は、プラットフォームに依存しない一貫したサイズを使用します。フォーマット文字列ではスペースは無視されます。

75

str.upcase

すべての小文字が対応する大文字に置き換えられたstrのコピーを返します。操作はロケールに依存しません。影響を受けるのは文字aからzのみです。

76

str.upcase!

strの内容を大文字に変更し、変更がない場合はnilを返します。

77

str.upto(other_str) { |s| block }

strで始まりother_strで終わる連続する値を繰り返し、各値を順番にブロックに渡します。String#succメソッドは、各値を生成するために使用されます。

文字列アンパックディレクティブ

指令 戻り値 説明
A ストリング 末尾のヌルとスペースが削除されています。
A ストリング ストリング。
B ストリング 各文字からビットを抽出します(最上位ビットが最初)。
b ストリング 各文字からビットを抽出します(最下位ビットが最初)。
C Fixnum 文字を符号なし整数として抽出します。
c Fixnum 文字を整数として抽出します。
D、d 浮く sizeof(double)文字をネイティブdoubleとして扱います。
E 浮く sizeof(double)文字をリトルエンディアンバイト順のdoubleとして扱います。
e 浮く sizeof(float)文字をリトルエンディアンバイト順のfloatとして扱います。
F、f 浮く sizeof(float)文字をネイティブfloatとして扱います。
G 浮く sizeof(double)文字をネットワークバイトオーダーのdoubleとして扱います。
g ストリング sizeof(float)文字をネットワークバイトオーダーのfloatとして扱います。
H ストリング 各文字から16進ニブルを抽出します(最上位ビットが最初)
h ストリング 各文字から16進ニブルを抽出します(最下位ビットが最初)。
整数 sizeof(int)(_で変更)の連続する文字を符号なしネイティブ整数として扱います。
整数 sizeof(int)(_で変更)の連続する文字を符号付きネイティブ整数として扱います。
L 整数 4つの(_で変更された)連続する文字を符号なしのネイティブ長整数として扱います。
l 整数 4つの(_で変更された)連続する文字を符号付きのネイティブ長整数として扱います。
M ストリング 引用-印刷可能。
m ストリング Base64でエンコードされています。
N 整数 4文字をネットワークバイトオーダーのunsignedlongとして扱います。
n Fixnum 2文字をネットワークバイトオーダーのunsignedshortとして扱います。
P ストリング sizeof(char *)文字をポインタとして扱い、参照された場所から\ emph {len}文字を返します。
p ストリング sizeof(char *)文字をnullで終了する文字列へのポインタとして扱います。
Q 整数 8文字を符号なしクワッドワード(64ビット)として扱います。
q 整数 8文字を符号付きクワッドワード(64ビット)として扱います。
S Fixnum 2つの(_が使用されている場合は異なります)連続する文字を、ネイティブバイト順の符号なしショートとして扱います。
s Fixnum 2つの(_が使用されている場合は異なります)連続する文字を、ネイティブバイト順の符号付きショートとして扱います。
U 整数 符号なし整数としてのUTF-8文字。
u ストリング UUエンコード。
V Fixnum 4文字をリトルエンディアンのバイト順でunsignedlongとして扱います。
v Fixnum 2文字をリトルエンディアンのバイト順でunsignedshortとして扱います。
w 整数 BER圧縮された整数。
バツ   1文字後方にスキップします。
バツ   1文字前にスキップします。
Z ストリング 末尾の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*')       #=> ["abc ", "abc "]
"aa".unpack('b8B8')                 #=> ["10000110", "01100001"]
"aaa".unpack('h2H2c')               #=> ["16", "61", 97]
"\xfe\xff\xfe\xff".unpack('sS')     #=> [-2, 65534]
"now = 20is".unpack('M*')           #=> ["now is"]
"whole".unpack('xax2aX2aX1aX2a')    #=> ["h", "e", "l", "l", "o"]