Ruby-strings

提供:Dev Guides
移動先:案内検索

ルビー-文字列

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`

エスケープ文字

____次の表は、バックスラッシュ表記で表すことができるエスケープ文字または印刷できない文字のリストです。

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

Backslash notation Hexadecimal character Description
\a 0x07 Bell or alert
\b 0x08 Backspace
\cx   Control-x
\C-x   Control-x
\e 0x1b Escape
\f 0x0c Formfeed
\M-\C-x   Meta-Control-x
\n 0x0a Newline
\nnn   Octal notation, where n is in the range 0.7
\r 0x0d Carriage return
\s 0x20 Space
\t 0x09 Tab
\v 0x0b Vertical tab
\x   Character x
\xnn   Hexadecimal notation, where n is in the range 0.9, a.f, or A.F

文字コード

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

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

$KCODE = 'u'

____次は、$ KCODEの可能な値です。

Sr.No. Code & Description
1

a

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

2

e

EUC.

3

n

なし(ASCIIと同じ)。

4

u

UTF-8

文字列組み込みメソッド

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

____Followingは、パブリックStringメソッドです(strがStringオブジェクトであると仮定)-

Sr.No. Methods & Description
1

str % arg

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

2

str * integer

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

3

str PLUS 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がStringでない場合、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!

chopと同じですが、変更はその場で行われます。

16

str.concat(other_str)

other_strをstrに連結します。

17

str.count(str, …​)

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

18

str.crypt(other_str)

一方向暗号化ハッシュをstrに適用します。 引数はソルト文字列で、2文字の長さで、各文字はa.z、A.Z、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 = DOLLAR/) \{
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

ブロック}*

パターンのすべての出現を置換またはブロックの値で置き換えて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)までの部分文字列を返します。範囲、範囲内の部分文字列を返します。 regexpは、一致した文字列の一部を返します。 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])[または]*
  • 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に対応するSymbolを返し、以前に存在しなかった場合はシンボルを作成します。

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)

パターンをRegexpに変換し(まだない場合)、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])[または]*
  • str.rindex(regexp [、fixnum]) *

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

50.
  • str.rjust(integer, padstr = ' ')*

integerがstrの長さよりも大きい場合、strを右寄せしてpadstrで埋めた長さintegerの新しいストリングを返します。それ以外の場合、strを返します。

51

str.rstrip

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

52

str.rstrip!

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

53

str.scan(pattern) [or]

  • str.scan(pattern)\ {
match、…​

ブロック}*

どちらの形式も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)[または] str.slice(other_str)*

  • str [fixnum]などを参照してください*

    *str.slice!(fixnum)[または] str.slice!(fixnum、fixnum)[または]*
    *str.slice!(範囲)[または] str.slice!(正規表現)[または]*
  • str.slice!(other_str) *

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

55
  • str.split(pattern = DOLLAR, [limit])*

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

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

_pattern_が正規表現の場合、strはパターンが一致する場所で分割されます。 パターンが長さ0の文字列と一致するときはいつでも、strは個々の文字に分割されます。

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

_limit_パラメーターを省略すると、末尾のヌルフィールドは抑制されます。 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

ブロック}*

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

61

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

  • str.sub!(パターン)\ {
match

ブロック}*

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です。 結果は、2n-1を法とする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にまとめられています。 各指令の後には、この指令で繰り返す回数を示す数字を続けることができます。 アスタリスク(*)は、残りのすべての要素を使い果たします。 ディレクティブsSiIlLの後には、アンダースコア(_)を続けて、指定された型の基になるプラットフォームのネイティブサイズを使用できます。それ以外の場合は、プラットフォームに依存しない一貫したサイズを使用します。 フォーマット文字列ではスペースは無視されます。

75

str.upcase

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

76

str.upcase!

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

77 *str.upto(other_str) \{
s

block }*

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

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

____次の表に、メソッドString#unpackのアンパックディレクティブを示します。

Directive Returns Description
A String With trailing nulls and spaces removed.
a String String.
B String Extracts bits from each character (most significant bit first).
b String Extracts bits from each character (least significant bit first).
C Fixnum Extracts a character as an unsigned integer.
c Fixnum Extracts a character as an integer.
D, d Float Treats sizeof(double) characters as a native double.
E Float Treats sizeof(double) characters as a double in littleendian byte order.
e Float Treats sizeof(float) characters as a float in littleendian byte order.
F, f Float Treats sizeof(float) characters as a native float.
G Float Treats sizeof(double) characters as a double in network byte order.
g String Treats sizeof(float) characters as a float in network byte order.
H String Extracts hex nibbles from each character (most significant bit first)
h String Extracts hex nibbles from each character (least significant bit first).
I Integer Treats sizeof(int) (modified by _) successive characters as an unsigned native integer.
i Integer Treats sizeof(int) (modified by _) successive characters as a signed native integer.
L Integer Treats four (modified by _) successive characters as an unsigned native long integer.
l Integer Treats four (modified by _) successive characters as a signed native long integer.
M String Quoted-printable.
m String Base64-encoded.
N Integer Treats four characters as an unsigned long in network byte order.
n Fixnum Treats two characters as an unsigned short in network byte order.
P String Treats sizeof(char *) characters as a pointer, and return \emph{len} characters from the referenced location.
p String Treats sizeof(char *) characters as a pointer to a null-terminated string.
Q Integer Treats eight characters as an unsigned quad word (64 bits).
q Integer Treats eight characters as a signed quad word (64 bits).
S Fixnum Treats two (different if _ used) successive characters as an unsigned short in native byte order.
s Fixnum Treats two (different if _ used) successive characters as a signed short in native byte order.
U Integer UTF-8 characters as unsigned integers.
u String UU-encoded.
V Fixnum Treats four characters as an unsigned long in little-endian byte order.
v Fixnum Treats two characters as an unsigned short in little-endian byte order.
w Integer BER-compressed integer.
X   Skips backward one character.
x   Skips forward one character.
Z String With trailing nulls removed up to first null with *.
COMMAT   Skips to the offset given by the length argument.

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

"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"]