前書き
Ruby stringsには、一般的なタスクであるテキストの変更と操作を容易にする多くの組み込みメソッドがあります多くのプログラムで。
このチュートリアルでは、文字列メソッドを使用して文字列の長さを決定し、文字列のインデックス付けと分割、部分文字列の抽出、空白やその他の文字の追加と削除、文字列の文字の大文字と小文字の変更、テキストの検索と置換を行います。 完了したら、これらの方法を独自のプログラムに組み込むことができます。
文字列の長さの決定
文字列メソッド `+ length`は、文字列の文字数を返します。 この方法は、パスワードの最小長または最大長を強制する必要がある場合、または略語として使用するために特定の制限内に収まるように大きな文字列を切り捨てる必要がある場合に役立ちます。
文の長さを出力する例を次に示します。
open_source = "Sammy contributes to open source."
print open_source.length
Output33
文字、数字、空白文字、記号を含むすべての文字が文字列の一部であるため、カウントされることに注意してください。
文字列が空かどうかを確認するには、その長さが `+ 0 `かどうかを確認するか、 ` empty?+`メソッドを使用します。
name = ""
name.empty? # true
name = "Sammy"
name.empty? # false
name = " "
name.empty? # false
文字列にインデックスを付け、文字列のコンテンツにアクセスする方法を見てみましょう。
文字列内の文字へのアクセス
文字列内のいくつかの文字を印刷または操作するには、 `+ slice +`メソッドを使用して希望の部分を取得します。
arraysのように、各要素はインデックス番号に対応し、文字列の各文字もインデックス番号0から始まるインデックス番号
文字列「+ Sammy +」の場合、インデックスの内訳は次のようになります。
0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
S |
a |
m |
m |
y |
`+ slice `メソッドを使用すると、単一の文字または一連の文字を取得できます。 単一の整数を渡すと、そのインデックスの文字が返されます。 コンマで区切られた2つの整数を渡すと、 ` slice `は最初のインデックスから最後のインデックスまでのすべての文字を返します。 ` slice `メソッドは、抽出する文字を指定するために、 ` 1..4 +`などの範囲も受け入れます。
"Sammy".slice(0) # "s"
"Sammy".slice(1,2) # "am"
"Sammy".slice(1..4) # "ammy"
`+ [] `構文は ` slice +`のエイリアスなので、文字列を配列のように扱うことができます:
"Sammy"[0] # "s"
"Sammy"[1,2] # "am"
"Sammy"[1..4] # "ammy"
負のインデックスを使用して、文字列の末尾から1文字にアクセスすることもできます。 `+ -1 `は文字列の最後の文字にアクセスでき、 ` -2 +`は最後から2番目にアクセスする、というように続きます。
最後に、 `+ chars +`メソッドで文字列を文字の配列に変換できます:
"sammy".chars # ["S", "a", "m", "m", "y"]
これは、文字列内の文字を操作または変換するのに役立ちます。
次に、文字列の文字の大文字と小文字を変更する方法を見てみましょう。
大文字と小文字への変換
`+ upcase `および ` downcase +`メソッドは、元の文字列のすべての文字が大文字または小文字に変換された文字列を返します。 文字列内の文字以外の文字は変更されません。
文字列 `+ Sammy Shark +`をすべて大文字に変換しましょう:
name = "Sammy Shark"
print name.upcase
OuputSAMMY SHARK
次に、文字列をすべて小文字に変換します。
print name.downcase
Ouputsammy shark
`+ upcase `および ` downcase +`関数は、全体で大文字と小文字を一致させることで、文字列の評価と比較を容易にします。 たとえば、ユーザー名を要求し、ユーザーが大文字でユーザー名を入力した場合、ユーザーの入力を小文字にして、既知の小文字の値と比較できます。
Ruby文字列には、最初の文字を大文字にした新しい文字列を返す `+ capitalize +`メソッドもあります。
"sammy".capitalize # "Sammy"
これは便利な方法ですが、使用方法に注意してください。最初の文字を大文字にするだけであるため、必要なユースケースに必ずしも適合しない場合があります。
Rubyには、大文字と小文字を入れ替えた文字列を返す `+ swapcase +`メソッドも用意されています。
text = "Sammy"
print text.swapcase
sAMMY
+ downcase +
、 + upcase +
、 + captalize +
、および `+ swapcase +`メソッドはすべて新しい文字列を返し、既存の文字列は変更しません。 これは、テキストをすぐに印刷する以外のことをしている場合に覚えておくことが重要です。 次の例を見てください。
text = "sammy"
text.capitalize
print "Hello, #{text}!"
OutputHello, sammy!
`+ text `変数で ` capitalize `を呼び出しましたが、 ` capitalize +`によって返される値をキャプチャすることはありませんでした。 次のようにプログラムを書き換える必要があります。
text = "sammy"
text = text.capitalize
print "Hello, #{text}!"
OutputHello, Sammy!
代わりに、「+ downcase!」、「 upcase!」、「 capitalize!」、および「 swapcase!+」を使用して、元の文字列を変更できます。
text = "sammy"
text = text.capitalize
print "Hello, #{text}!"
しかし注意してください。 元の文字列を変更することには欠点があります。 Rubyには両方のメソッドが用意されているため、ニーズに合ったメソッドを選択できます。
次に、文字列の空白を追加および削除しましょう。
文字列のパディングとストリップ
テキストをフォーマットする必要があるプログラムを作成している場合、他のデータと整列させるために、文字列の前、後、または周囲にスペースを追加することがよくあります。 また、余分な空白や特殊文字など、文字列の先頭または末尾から不要な文字を削除することもできます。
文字列をスペースで囲むには、 `+ center +`メソッドを使用します:
"Sammy",center(21) # " Sammy "
別の文字を使用する場合は、2番目の引数として文字列を指定できます。
" [Sammy] ".center(21, "<>") # "<><><> [Sammy] <><><>"
+ ljust`および
+ rjust`メソッドは、文字列の左側または右側にスペースまたは文字を追加し、 `+ center +`メソッドとまったく同じように機能します。
"Sammy".ljust(20) # "Sammy "
"Sammy".rjust(20) # " Sammy"
"Sammy".rjust(20, "!") # "!!!!!!!!!!!!!!!Sammy"
文字列から先頭のスペースを削除するには、 `+ rstrip `メソッドを使用します。 末尾のスペースを削除するには、「 lstrip 」を使用します。 ` strip +`を使用して、先頭と末尾の両方のスペースを削除します。
" Sammy".rstrip # "Sammy"
"Sammy ".lstrip # "Sammy"
" Sammy ".strip # "Sammy"
+ center!+
、 + ljust +
!、 + rjust!+
、 + lstrip!+
、 + rstrip!+
、および `+ strip!+`メソッドを使用して、オリジナルを変更できます。文字列。
場合によっては、文字列の末尾から文字を削除する必要があります。 Rubyの `+ chop +`メソッドはまさにそれを行います。文字列から最後の文字を削除します。
"Sammy".chop # "Samm"
これは、文字列から改行文字( + \ n +
)を削除する場合に特に便利です。
"This string has a newline\n".chop
`+ chop `メソッドは元の文字列をそのまま残し、新しい文字列を返します。 ` chop!+`メソッドは、既存の文字列を変更します。
`+ chomp +`メソッドは文字列の末尾から複数の文字を削除できます:
"Sammy".chomp("my") # "Sam"
削除する文字列を指定しない場合、 `+ chomp +`は改行を削除します:
"This string has a newline\n".chomp # "This string has a newline
ただし、文字列に改行文字が含まれていない場合、 `+ chomp +`は元の文字列を返します。
"Sammy".chomp # "Sammy"
これにより、最後の文字を常に削除する `+ chop `メソッドよりも、改行を削除するときに ` chomp +`を使用する方が少し安全になります。
Rubyには、元の文字列を変更し、置換を実行した場合に変更された文字列を返す `+ chomp!`メソッドがあります。 ただし、 ` chomp `とは異なり、 ` chomp!`メソッドは文字列を変更しなかった場合は ` nil +`を返します。
string = "Hello\n"
string.chomp! # "Hello"
string = "Hello"
string.chomp! # nil
次に、文字列内のテキストを検索する方法を見てみましょう。
文字とテキストの検索
文字列に別の文字列が含まれているかどうかを判断する必要がある場合があります。
+ include?+`メソッドは、文字列に別の文字列が含まれているかどうかを確認します。 文字列が存在する場合は `+ true`を返し、存在しない場合は
+ false`を返します。
"Sammy".include?("a") # true
"Sammy".include?("b") # false
`+ index `メソッドは文字のインデックスを返します。 また、サブストリングの最初の文字のインデックスを識別できます。 そして、文字または部分文字列が存在しない場合、 ` nil +`を返します。
"Sammy".index("a") # 1
"Sammy".index("mm") # 2
"Sammy".index("Fish") # nil
ただし、 `+ index`メソッドは最初の出現のみを検出します。 長い文字列の例を次に示します。
text = "Sammy has a balloon"
text.index("a") # 1
文字列「+ Sammy has a balloon」には、文字「a」が4回出現します。 しかし、 `+ index +`は最初の出現のみを見つけました。 他のオカレンスの1つを見つけるには、より具体的なものを記述する必要があります。
たとえば、文字列を文字の配列に変換し、https://www.digitalocean.com/community/tutorials/how-to-use-array-methods-in-ruby [配列メソッド]を使用して、結果と文字のインデックスを選択します。 これを行うための1つの方法を次に示します。
text = "Sammy has a balloon"
indices = text.chars
.each_with_index
.select{|char, index| char == "a" }
.map{|pair| pair.last}
print indices
[1, 7, 10, 13]
`+ each_with_index `は、各文字とそのインデックスのエントリを含む2次元配列を返します。 ` select `は、文字が ` a `であるエントリのみに絞り込み、 ` map +`は2次元配列をインデックスの1次元配列に変換します。
文字列内の文字を探すことに加えて、 `+ start_with?+`メソッドを使用して、文字列が文字または部分文字列で始まるかどうかを確認できます。
text = "Sammy has a balloon"
text.start_with?("s") # true
text.start_with?("Sammy has" # true
`+ start_with?+`メソッドは複数の文字列を受け入れ、それらのいずれかが一致する場合にtrueを返します。
text = "Sammy has a balloon"
text.start_with?("Sammy the Shark", "Sammy") # true
この例では、「Sammy the Shark」は見つかりませんが、「Sammy」は見つかったため、戻り値は `+ true +`です。
`+ end_with?`メソッドを使用して、文字列が指定された部分文字列で終わるかどうかを確認できます。 ` start_with?+`とまったく同じように機能します:
text = "Sammy has a balloon"
text.end_with?("balloon") # true
text.end_with?("boomerang") # false
text.end_with?("boomerang", "balloon") # true
テキストを見つける方法を検討したので、そのテキストを別のテキストに置き換える方法を見てみましょう。
文字列内のテキストを置き換える
ワードプロセッサの検索および置換機能を使用すると、文字列を検索して別の文字列に置き換えることができます。 Rubyでは、 + sub`メソッドと
+ gsub`メソッドを使用してこれを行うことができます。
`+ sub +`メソッドは文字列の一部を別のものに置き換えます。
サミーにはバルーンがありません。それは飛び去った。 サブストリング `" has "`を `" had "`に変更します。
balloon = "Sammy has a balloon"
print balloon.sub("has","had")
出力は次のようになります。
OuputSammy had a balloon.
`+ sub`メソッドは、最初に一致したものを新しいテキストに置き換えるだけです。 単語 `+ has +`が2回出現する修正された文字列を使用してみましょう。
balloon = "Sammy has a balloon. The balloon has a ribbon"
print balloon.sub("has","had")
OutputSammy a balloon. The balloon has a ribbon
最初の発生のみが変更されました。
それらをすべて変更するには、_global_置換を実行する `+ gsub +`メソッドを使用します。
balloon = "Sammy has a balloon. The balloon has a ribbon"
print balloon.gsub("has","had")
OutputSammy a balloon. The balloon a ribbon
`+ sub `および ` gsub +`メソッドは常に新しい文字列を返し、元の文字列は変更しません。 文字列の「バルーン」を「ブーメラン」に変更して、これを示しましょう。
text = "Sammy has a balloon"
text.gsub("ballooon", "boomerang")
print text
OutputSammy has a balloon
出力には、探している結果は表示されません。置換を指定したが、 `+ gsub +`の結果を新しい変数に割り当てたことがないためです。 希望する結果を得るには、次のようにプログラムを書き換えることができます。
text = "Sammy has a balloon"
text = text.sub("ballooon", "boomerang")
print text
あるいは、代わりに `+ sub!+`を使用して、元の文字列を変更できます。 いくつかの文字列の置換を実行して、これを試してみましょう。 「赤い風船」を「青いブーメラン」に変更します。
text = "Sammy has a red balloon"
text.sub!("red", "blue")
text.sub!("balloon", "boomerang")
print text
OutputSammy has a blue boomerang
`+ gsub!+`メソッドを使用して、グローバルな置換を行うこともできます。
`+ sub `および ` gsub `メソッドは、検索パターンにhttps://www.digitalocean.com/community/tutorials/an-introduction-to-regular-expressions [正規表現]を受け入れます。 文字列のすべての母音を ` @ +`記号に置き換えましょう:
"Sammy has a red balloon".gsub /[aeiou]/, "@"
"S@mmy h@s @ r@d b@ll@@n"
置換値は文字列である必要はありません。 ハッシュを使用して、個々の文字またはピースを置き換える方法を指定できます。 出現するすべての文字「+ a」を「+ @ 」に置き換え、すべての「 o +」文字をゼロに置き換えます。
"Sammy has a red balloon".gsub /[aeiou]/, {"a" => "@", "o" => "0"}
# "S@mmy h@s @ rd b@ll00n"
これを使用して、より少ないコードでより複雑な置換を実行できます。
結論
このチュートリアルでは、文字列データ型の組み込みメソッドのいくつかを使用して、文字列を操作および操作しました。 また、文字列を操作するためのメソッドの多くには、文字列を変更せずに残す方法と、元の文字列を変更する方法の2つのバリエーションがあります。 どちらを使用するかは、ニーズによって異なります。 Rubyを使用すると、データの操作方法を柔軟に選択できます。 ただし、既存のデータを変更しないコードを記述すると、後でデバッグしやすくなります。
Rubyでデータを操作する方法を引き続き検討するには、これらの関連チュートリアルを参照してください。