序章

文字列は、文字、数字、または記号で構成される1つ以上の文字のシーケンスです。

Ruby 文字列はオブジェクトであり、他の言語とは異なり、文字列は可変です。つまり、新しい文字列を作成する代わりに、その場で変更できます。

作成するほとんどすべてのプログラムで文字列を使用します。 文字列を使用すると、テキストを使用して表示し、ユーザーと通信できます。 実際、現在読んでいるページは、Webブラウザを介して画面に表示される文字列で構成されています。 文字列は、プログラミングの最も重要な基礎の1つです。

このチュートリアルでは、Rubyで文字列を操作する方法を学習します。 文字列を作成して画面に表示し、変数に格納し、複数の文字列を結合して、改行、アポストロフィ、二重引用符などの特殊文字を処理する方法を学習します。

文字列の作成と印刷

文字列はいずれかの単一引用符で囲まれています ' または二重引用符 " Rubyでは、文字列を作成するには、文字のシーケンスをいずれかで囲みます。

'This is a string in single quotes.'

"This is a string in double quotes."

一重引用符または二重引用符のいずれかを使用することを選択できます。 ほとんどの場合、一貫している限り、どちらを選択してもかまいません。 ただし、二重引用符を使用すると、文字列補間を実行できます。これについては、このチュートリアルで学習します。

プログラムで文字列を表示するには、 print 方法:

print "Let's print out this string."

The print メソッドは、記述されたとおりに文字列を表示します。

やってみよう。 という新しいRubyプログラムを作成する print.rb テキストエディタを使用して使用する print 3つの文字列を印刷するには:

print.rb
print 'This is the first string.'
print 'This is the second string.'
print 'This is the third string.'

ファイルを保存して、プログラムを実行します。

  1. ruby print.rb

次の出力が表示されます。

Output
This is the first string.This is the second string.This is the third string.

3つの文字列がそれぞれの行に印刷される代わりに、3つの文字列すべてが1行に一緒に印刷されました。 The print メソッドは文字列を画面に出力しますが、各文字列を独自の行に配置する場合は、改行文字を自分で追加する必要があります。

3つの文字列すべてを別々の行に配置する場合は、 puts 代わりにメソッド。 使用するプログラムを変更する puts それ以外の print:

print.rb
puts 'This is the first string.'
puts 'This is the second string.'
puts 'This is the third string.'

プログラムを再度実行すると、次の出力が表示されます。

Output
This is the first string. This is the second string. This is the third string.

The puts メソッドは、指定した文字列を出力しますが、文字列の最後に改行文字を追加します。

文字列を変数に格納する

Variables は、コンピューターのメモリ内の場所への名前付き参照です。 変数を使用してデータを保存し、後で取得します。

文字列を変数に格納するには、変数名を定義し、文字列の値を割り当てます。

my_string = 'This is my string'

次に、値を取得するには、変数の名前を使用します。

print my_string

これを自分でテストするには、ファイルを作成します string_variables.rb エディターで次のコードを追加します。

string_variables.rb
my_name = "Sammy the Shark"
my_age = "none of your business"

puts my_name
puts my_age

このプログラムは2つの変数を定義します: my_name とmy_age。 各変数には文字列が割り当てられます。 次に、 puts 各文字列を独自の行に出力するメソッド。

ファイルを保存して、プログラムを実行します。

  1. ruby string_variables.rb

次の出力が表示されます。

Output
Sammy the Shark none of your business

文字列を変数に割り当てることで、使用するたびに同じ文字列を何度も入力する必要がなくなり、プログラムでの文字列の操作や操作が簡単になります。

文字列を結合して新しい文字列を作成する方法を見てみましょう。

文字列の連結

連結は、2つ以上の文字列を結合して新しい文字列を作成することを意味します。 連結するために、次のように表される連結演算子を使用します。 + シンボル。 The + シンボルは、算術演算で使用される場合、加算演算子でもあります。

文字列を連結する方法は次のとおりです sammyshark 一緒:

"sammy" + "shark"

これにより、次の出力が生成されます。

Output
sammyshark

連結は文字列を端から端まで結合し、それらを結合して新しい文字列値を出力します。 単語の間にスペースを入れたい場合 sammyshark、次のように、文字列の1つにそのスペースを含める必要があります。

"sammy " + "shark"

これで、プログラムでこのようなコードを実際に作成することはありませんが、文字列と変数を頻繁に組み合わせる必要があります。そこで、連結が必要になります。

次に例を示します。

color = "Blue"
print "My favorite color is " + color

これにより、出力が生成されます My favorite color is blue. 単語の後にスペースを残したことに注意してください is 文字列内にあるため、出力には文字列と出力内の変数の値の間にスペースがあります。

この方法で、複数の文字列を連結できます。 ファイルを作成する concatenation.rb 次のコードを追加します。

concatenation.rb
my_name = "Sammy the Shark"
my_age = "none of your business"

puts "My name is " + my_name + " and my age is " + my_age + "."

このプログラムは2つの変数を定義します: my_namemy_string、以前と同じように、それぞれに独自の文字列が割り当てられています。 ただし、今回は、値を出力する代わりに、連結を使用してこれらの値をより多くのコンテキストで出力する文字列を出力します。

このプログラムを実行すると、次の出力が表示されます。

Output
My name is Sammy the Shark and my age is none of your business.

この小さなプログラムでは、連結を使用してこの文字列に変数を挿入しました。

連結によって2つ以上の文字列を組み合わせると、プログラム全体で使用できる新しい文字列が作成されるため、作成した文字列を後で使用できる新しい変数に割り当てることができます。

concatenation.rb
my_name = "Sammy the Shark"
my_age = "none of your business"

# assign concatenated string to variable
output = "My name is " + my_name + " and my age is " + my_age + "."

# Print the output.
puts output

このような小さなプログラムでは、余分なものを使用します output 変数はおそらく不要です。 ただし、大規模なプログラムでは、複数の場所で使用する連結を使用して文字列を作成することをお勧めします。 連結や算術などのデータ処理を出力から分離することも良い習慣です。最終的にはプログラムが大きくなり、ロジックと出力を別々のファイルまたはコンポーネントに分離して、管理しやすくする必要があるためです。

使用しないでください + 2つの異なるデータ型間の演算子。 たとえば、文字列と整数を連結することはできません。

何が起こるかを確認するには、という新しいプログラムを作成します strings_and_integers.rb 次の内容で:

strings_and_integers.rb
my_name = "Sammy the Shark"
my_number = 27

print my_name + my_number

今回は my_name 文字列を保持します Sammy the Sharkmy_number 整数を保持します 27. 私達はことを知っています 27 引用符で囲まれているため、文字列ではありません。 また、小数点がないため、整数であることがわかります。

プログラムを実行する場合:

  1. ruby strings_and_ints.rb

次のエラーメッセージが表示されます。

Output
strings_and_ints.rb:4:in `+': no implicit conversion of Integer into String (TypeError) from strings_and_ints.rb:4:in `<main>'

エラー no implicit conversion of Integer into String これは、Rubyが文字列を既存の文字列にのみ連結できることを意味します。

Rubyバージョン2.3以下では、代わりに次のエラーメッセージが表示されます。

strings_and_ints.rb:4:in `+': no implicit conversion of Fixnum into String (TypeError)
	from strings_and_ints.rb:4:in `<main>'

キーワード Fixnum 以前のバージョンのRubyで整数に与えられたデータ型でした。 固定番号の略です。 Ruby 2.4では、 Fixnum とその対応物、 Bignum、存在しなくなり、に置き換えられます Integer 代わりは。

プログラムを変更して番号を付けることができます27 引用符で("27")整数ではなく文字列として宣言されるようにします。 または、次のように、文字列を作成するときに数値を文字列に変換できます。

strings_and_integers.rb
my_name = "Sammy the Shark"
my_number = 27

print my_name + my_number.to_s

The .to_s メソッドは整数を文字列に変換します。 これは、プログラム内で数値を整数として保持できるため、より優れたアプローチです。 印刷するときに必要なのは文字列だけですが、プログラムロジックの他の部分で使用する必要がある場合は、整数にする必要があります。

プログラムを再度実行すると、次のように表示されます。 Sammy the Shark27 画面に印刷されます。

数字を文字列に変換して連結することは、郵便番号、通貨、電話番号、およびテキストと一緒に画面に表示するその他の数値データを処理するときに頻繁に発生するものです。

連結は強力ですが、注意が必要な場合があります。 誤っていずれかを省略した場合 + 演算子を使用すると、構文エラーが発生する可能性があります。 また、数値を保持する変数と文字列を結合する必要がある場合は、変数を文字列に変換する必要があります。 Rubyは、変数値を文字列に挿入する別の方法を提供します。これは、文字列補間と呼ばれ、これらの問題の両方に対処します。

文字列補間の使用

文字列と変数を連結する場合、出力の読み取りとデバッグが困難になる可能性があります。 文字列補間は、二重引用符で囲まれた文字列に式を埋め込むことでこれを解決します。

これを書く代わりに:

"My name is " + my_name + "!"

あなたはこれを行うことができます:

"My name is #{my_name}!"

文字列を終了して使用する代わりに + 演算子、変数をで囲みます #{} 構文。 この構文は、Rubyに式を評価して文字列に挿入するように指示します。

やってみよう。 と呼ばれる新しいプログラムを作成します interpolation.rb 次のコードを追加します。

補間.rb
my_name = "Sammy the Shark"
my_age = "none of your business"

output = "My name is #{my_name} and my age is #{my_age}."

puts output

これはすでに作成したプログラムと同じですが、今回は文字列補間を使用して出力を作成しています。

文字列補間には別の利点があります。数値を文字列に自動的に変換できることです。 あなたのことを覚えておいてください strings_and_integers.rb プログラム? そのファイルをエディターで再度開きますが、最後の行を次のように変更します。

strings_and_integers.rb
my_name = "Sammy the Shark"
my_number = 27

# use interpolation instead of concatenation
print "My name is #{my_name} and my favorite number is #{my_number}."

Rubyは自動的に変換します my_number 文字列に変換すると、実行時にプログラムは次の出力を出力します。

Output
My name is Sammy the Shark and my favorite number is 27.

文字列補間は強力で便利です。 これは、文字列を変数と連結するための推奨される方法でもあります。

文字列リテラルと文字列値

作成したすべての文字列はコード内で引用符で囲まれていますが、実際の印刷出力には引用符が含まれていないことに注意してください。

これらのそれぞれを参照する場合、違いがあります。 文字列リテラルは、引用符を含め、ソースコードに記述されている文字列です。 文字列値は出力に表示されるものであり、引用符は含まれていません。

これは文字列リテラルです。

"Sammy the Shark"

文字列値は次のようになります Sammy the Shark.

文字列に引用符やアポストロフィなどの特殊文字を使用する場合を除いて、ほとんどの場合、この違いについて心配する必要はありません。

文字列での引用符とアポストロフィのエスケープ

文字列を表すために引用符が使用されているため、文字列にアポストロフィと引用符が必要な場合は、少し余分な作業を行う必要があります。

次のように、一重引用符で囲まれた文字列の途中でアポストロフィを使用しようとすると、次のようになります。

'This isn't what I wanted.'

のアポストロフィ isn't この例の奇妙な強調表示からわかるように、文字列を終了します。 その結果、Rubyインタープリターは目的の文字列の残りをコードとして解析しようとし、エラーが発生します。

二重引用符で囲まれた文字列で二重引用符を使用した場合も、同じ状況が発生します。

"Sammy says, "Hello!""

この例では、前の最後の二重引用符 Hello 文字列を終了し、その後の二重引用符 Hello! 終了するための一致する二重引用符がない新しい文字列を作成するため、Rubyはエラーを表示します。

この問題を回避するには、いくつかのオプションがあります。 まず、文字列を作成するための代替構文を使用できます。 文字列で二重引用符を使用する必要がある場合は、一重引用符を使用して文字列を定義します。その逆も同様です。 引用符をエスケープすることも、別のRuby構文を使用して文字列を定義することもできます。 それぞれのアプローチを見てみましょう。

オプション1:代替文字列構文を使用する

これらの問題を回避する最も簡単な方法は、文字列に二重引用符を含める必要がある場合は文字列を一重引用符で囲み、文字列で一重引用符を使用する必要がある場合は文字列を二重引用符で囲むことです。

この文字列を一重引用符で定義する代わりに:

'This isn't what I wanted.'

二重引用符で定義します。

"This isn't what I wanted."

そして、この文字列を定義するために二重引用符を使用する代わりに:

"Sammy says, "Hello!""

一重引用符を使用します。

'Sammy says, "Hello!"'

代替構文を使用すると、いくつかの簡単なジャムから抜け出すことができますが、常に機能するとは限りません。 たとえば、どちらのアプローチもこの文字列では機能しません。

"Sammy says, "I'm a happy shark!""

この例では、前の最後の二重引用符 I'm 本当に物事を捨てます。 これにより最初の文字列が終了し、Rubyはでアポストロフィに遭遇します I'm、値で新しい文字列を開始します m a happy shark!"". ただし、この新しい文字列には、それを終了するための一致する一重引用符がありません。 また、一重引用符を使用して文字列を囲むと、同様の問題が発生します。

'Sammy says, "I'm a happy shark!"'

今回はアポストロフィ I'm 文字列を終了します。

代替構文を使用すると、コードに一貫性がなくなる可能性もあります。 文字列構文を絶えず切り替えると混乱する可能性があります。この問題を回避するには、エスケープ文字を使用できます。

オプション2:文字列内の文字のエスケープ

バックスラッシュ文字(\)は、文字列内のエスケープ文字と呼ばれることが多く、Rubyが文字列内の次の文字を文字通りに解釈するのを防ぎます。

これが問題のある文字列で、二重引用符でエンコードされ、内部に二重引用符が含まれています。

"Sammy says, "I'm a happy shark!""

と呼ばれる新しいRubyプログラムを作成します quoting.rb 次のコードをファイルに追加します。

quoting.rb
print "Sammy says, "I'm a happy shark!""

プログラムを実行します。

  1. ruby quoting.rb

そして、次の出力が表示されます。

Output
quoting.rb:1: syntax error, unexpected tCONSTANT, expecting end-of-input print "Sammy says, "I'm a happy shark!"" ^

エラーを修正するには、内側の二重引用符の前に円記号を使用します。

quoting.rb
print "Sammy says, \"I'm a happy shark!\""

次に、プログラムを再度実行すると、期待した出力が表示されます。

Sammy says, "I'm a happy shark!"

この例では、競合がないため、アポストロフィをエスケープする必要がないことに注意してください。 Rubyを混乱させる引用符をエスケープするだけで済みます。

別の構文を使用して文字列を定義することにより、引用符を完全にエスケープすることを回避できます。

オプション3:文字列に代替構文を使用する

これまで、引用符を使用して文字列の境界を定義してきました。 他の文字を使用してRubyで文字列を作成することもできます。区切り文字、または文字列を囲むために使用する文字を、パーセント記号の後に次のように指定することで定義できます。

%$Sammy says, "I'm a happy shark!"$

この構文は、埋め込まれた文字列を自動的にエスケープします。 実際の文字列は次のようになります。

"Sammy says, \"I'm a happy shark!\""

ただし、区切り文字を変更すると、使用する必要がある場合は区切り文字をエスケープする必要があります。 この場合。 文字列でドル記号を使用する必要がある場合は、文字列で文字通りのドル記号をエスケープする必要があります。

これを回避するために、中括弧、角括弧、または括弧のペアを区切り文字として使用することもできます。 中括弧が最も一般的です:

%{Sammy says, "I'm a happy shark!"}

これらのフォームはすべて、必要に応じて文字列補間をサポートしています。

droplets = 5
print %{Sammy says, "I just created #{droplets} droplets!"}

あなたも見るでしょう %Q{}%q{} Rubyプログラムで文字列を定義するために使用されます。 The %Q{} 構文は二重引用符で囲まれた文字列とまったく同じように機能します。つまり、二重引用符をエスケープする必要はなく、文字列補間を使用できます。

droplets = 5
print %Q{Sammy says, "I just created #{droplets} droplets!"}

The %q{} 構文は、一重引用符で囲まれた文字列とまったく同じように機能します。

%q{Sammy says, "I'm a happy shark!"}

あなたは見るかもしれません %q%Q 一部のプログラムでは、中括弧の代わりに括弧または中括弧を使用して使用される構文。

ご覧のとおり、Rubyで文字列を作成する方法はたくさんあります。 どちらの方法を選択する場合でも、コードに一貫性を持たせてください。 あなたはそれを見つけるでしょう %Q{}%{} メソッドが最も一般的です。

特殊文字の処理方法がわかったので、長い文字列と改行文字の処理方法を見てみましょう。

長い文字列と改行

文字列に改行文字やキャリッジリターンを挿入したい場合があります。 あなたは使用することができます \n また \r コードに改行を挿入するには、文字をエスケープします。

output = "This is\na string\nwith newlines"
puts output

このプログラムは、次の出力を生成します。

Output
This is a string with newlines

これは技術的には、複数の行で出力を取得するために機能します。 ただし、非常に長い文字列を1行に書き込むと、すぐに読みにくくなり、操作が非常に難しくなります。 いくつかの解決策があります。

まず、連結演算子を使用して、文字列を複数の行に分割できます。

output = "This is a\n" +
         "longer string\n" +
         "with newlines."
puts output

これは、すでに行ったことと同様に、3つの文字列を連結するだけです。

文字列に改行を入れることもできます。

output = "This is a
         longer string
         with newlines"
puts output

代替文字列構文のいずれかを使用して、複数行の文字列を作成することもできます。

output = %{This is a
           longer string
           with newlines}
puts output

これらの例の両方で、改行は必要ないことに注意してください( \n)文字。 このアプローチでは、インデントや改行などの空白が保持されます。

その結果、出力には、次のように、改行とすべての先頭のインデントが含まれます。

Output
This is a longer string with newlines

これを防ぐには、コードから余分な空白を削除します。

output = %{This is a
longer string
with newlines
}

ヒアドキュメント、またはプログラムで複数行の文字列リテラルに使用される用語である「ヒアドキュメント」を使用して、複数行の文字列を作成することもできます。 そのコードを書く方法は次のとおりです。

output = <<-END
This is a
longer string
with newlines
END

The <<-ENDEND マーカーは、ヒアドキュメントの開始と終了を示します。

Rubyのヒアドキュメントも空白文字を保持します。つまり、ヒアドキュメントのコードをインデントすると、先頭のインデントも保持されます。 したがって、このコード:

output = <<-END
  This is a
  longer string
  with newlines
END

2つのインデントスペースで印刷されます。

Ruby 2.3以降では、この先頭の空白を自動的に削除する「波状のヒアドキュメント」構文が提供されています。 ヒアドキュメント定義のハイフンをチルダに置き換えます。 <<- になります <<~、 このような:

output = <<~END
  This is a
  longer string
  with newlines
  and the code is indented
  but the output is not.
END

これにより、次の出力が生成されます。

Output
This is a longer string with newlines and the code is indented but the output is not.

これにより、ヒアドキュメントを使用して、コードを適切にインデントすることができます。

Rubyのヒアドキュメントは文字列補間もサポートしています。

ご覧のとおり、Rubyで改行と複数行の文字列を処理する方法はたくさんあります。 各プロジェクトには独自のスタイルがある傾向があるため、既存のRubyコードを操作するときに、これらすべてのメソッドに遭遇します。 独自のコードで、自分に合ったスタイルを選択し、一貫性を保ちます。

文字列の複製

Rubyを使用して文字列を数回繰り返す必要がある場合があります。 あなたはでそうすることができます * オペレーター。 以下のような + 演算子、 * 演算子は、数値とともに使用する場合とは異なる使用法があり、乗算の演算子です。 1つの文字列と1つの整数で使用する場合、 *文字列複製演算子であり、指定した整数を使用して、1つの文字列を何度でも繰り返します。

印刷するには Sammy 9回、次のコードを使用します。

print "Sammy" * 9

このコードは次の出力を生成します。

Output
SammySammySammySammySammySammySammySammySammy

これを使用して、素敵なASCIIアートを作成できます。 というファイルを作成します banner.rb 次のコードを追加します。

puts "=" * 15
puts "| Hello World |"
puts "=" * 15

プログラムを実行する前に、プログラムが何を生成するか想像できますか?

次の出力が生成されます。

Output
=============== | Hello World | ===============

これは、コンピューターに反復的なタスクを実行させる方法のほんの一例です。

結論

このチュートリアルでは、Rubyプログラミング言語でStringデータ型を操作する方法を学びました。 新しい文字列を作成し、それらを他の文字列と連結し、改行、引用符、およびアポストロフィを処理しました。 次に、文字列補間を使用して文字列と変数値の混合を容易にし、文字列を繰り返す方法を学びました。