Rubyで文字列メソッドを操作する方法
序章
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 |
The slice
メソッドを使用すると、単一の文字または文字の範囲を取得できます。 単一の整数を渡すと、そのインデックスの文字が返されます。 カンマで区切られた2つの整数を渡すと、次のようになります。 slice
最初のインデックスから最後のインデックスまでのすべての文字を返します。 The slice
メソッドは、次のような範囲も受け入れます 1..4
、抽出する文字を指定するには:
"Sammy".slice(0) # "s"
"Sammy".slice(1,2) # "am"
"Sammy".slice(1..4) # "ammy"
The []
構文はのエイリアスです slice
、したがって、文字列を配列のように扱うことができます。
"Sammy"[0] # "s"
"Sammy"[1,2] # "am"
"Sammy"[1..4] # "ammy"
負のインデックスを持つ文字列の最後から1文字にアクセスすることもできます。 -1
文字列の最後の文字にアクセスできます。 -2
最後から2番目にアクセスします。
最後に、文字列を文字の配列に変換できます。 chars
方法:
"sammy".chars # ["S", "a", "m", "m", "y"]
これは、文字列内の文字を操作または変換する場合に役立ちます。
次に、文字列内の文字の大文字と小文字を変更する方法を見てみましょう。
大文字と小文字への変換
The upcase
と downcase
メソッドは、元の文字列のすべての文字が大文字または小文字に変換された文字列を返します。 文字以外の文字列内の文字は変更されません。
文字列を変換してみましょう Sammy Shark
すべて大文字にする:
name = "Sammy Shark"
print name.upcase
OuputSAMMY SHARK
次に、文字列をすべて小文字に変換しましょう。
print name.downcase
Ouputsammy shark
The upcase
と downcase
関数を使用すると、大文字と小文字を一貫させることで、文字列の評価と比較が簡単になります。 たとえば、ユーザー名を要求し、ユーザーが大文字でユーザー名を入力した場合、ユーザーの入力を小文字にして、既知の小文字の値と比較できます。
Ruby文字列にも capitalize
最初の文字を大文字にした新しい文字列を返すメソッド:
"sammy".capitalize # "Sammy"
これは便利な方法ですが、使用方法には注意してください。 最初の文字を大文字にするだけなので、必要なユースケースに必ずしも適合するとは限りません。
Rubyはまた提供します swapcase
大文字と小文字を入れ替えた文字列を返すメソッド:
text = "Sammy"
print text.swapcase
sAMMY
The downcase
, upcase
, captalize
と swapcase
すべてのメソッドは新しい文字列を返し、既存の文字列は変更されません。 これは、テキストをすぐに印刷する以外のことをしている場合は覚えておくことが重要です。 次の例を見てください。
text = "sammy"
text.capitalize
print "Hello, #{text}!"
OutputHello, sammy!
電話したのに capitalize
に text
変数、によって返される値をキャプチャすることはありません 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] <><><>"
The 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!
元の文字列を変更するメソッド。
文字列の末尾から文字を削除する必要がある場合があります。 ルビーズ chop
メソッドはまさにそれを行います。 文字列から最後の文字を削除します。
"Sammy".chop # "Samm"
これは、改行文字を削除する場合に特に便利です(\n
)文字列から:
"This string has a newline\n".chop
The chop
メソッドは元の文字列をそのまま残し、新しい文字列を返します。 The chop!
メソッドは、既存の文字列を変更します。
The chomp
メソッドは、文字列の末尾から複数の文字を削除できます。
"Sammy".chomp("my") # "Sam"
削除する文字列を指定しない場合は、 chomp
改行を削除します:
"This string has a newline\n".chomp # "This string has a newline
ただし、文字列に改行文字が含まれていない場合は、 chomp
元の文字列を返すだけです。
"Sammy".chomp # "Sammy"
これにより chomp
改行を削除するときは、 chop
メソッド。常に最後の文字を削除します。
Rubyには chomp!
元の文字列を変更し、置換を実行した場合は変更された文字列を返すメソッド。 ただし、 chomp
、 chomp!
メソッドは nil
文字列を変更しなかった場合:
string = "Hello\n"
string.chomp! # "Hello"
string = "Hello"
string.chomp! # nil
次に、文字列内のテキストを検索する方法を見てみましょう。
文字とテキストの検索
文字列に別の文字列が含まれているかどうかを判断する必要がある場合があります。
The include?
メソッドは、文字列に別の文字列が含まれているかどうかを確認します。 戻ります true
文字列が存在し、 false
そうでない場合:
"Sammy".include?("a") # true
"Sammy".include?("b") # false
The index
メソッドは文字のインデックスを返します。 また、部分文字列の最初の文字のインデックスを識別することもできます。 そしてそれは戻ります nil
文字または部分文字列が存在しない場合:
"Sammy".index("a") # 1
"Sammy".index("mm") # 2
"Sammy".index("Fish") # nil
The index
ただし、メソッドは最初の発生のみを検出します。 文字列が長い例を次に示します。
text = "Sammy has a balloon"
text.index("a") # 1
文字列 Sammy has a balloon
文字「a」が4回出現します。 しかし index
最初の発生のみが見つかりました。 他の発生の1つを見つけるには、より具体的なものを作成する必要があります。
たとえば、文字列を文字の配列に変換し、配列メソッドを使用して結果を反復処理し、文字のインデックスを選択できます。 これを行うための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
The 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
メソッド。
The sub
メソッドは、文字列の一部を別の文字列に置き換えます。
サミーはもう風船を持っていません。 それは飛び去った。 部分文字列を変更しましょう "has"
に "had"
.
balloon = "Sammy has a balloon"
print balloon.sub("has","had")
出力は次のようになります。
OuputSammy had a balloon.
The sub
メソッドは、一致の最初の出現を新しいテキストに置き換えるだけです。 単語が2回出現する変更された文字列を使用してみましょう has
:
balloon = "Sammy has a balloon. The balloon has a ribbon"
print balloon.sub("has","had")
OutputSammy had a balloon. The balloon has a ribbon
最初の発生のみが変更されました。
それらをすべて変更するには、 gsub
グローバル置換を実行するメソッド:
balloon = "Sammy has a balloon. The balloon has a ribbon"
print balloon.gsub("has","had")
OutputSammy had a balloon. The balloon had a ribbon
The sub
と gsub
メソッドは常に新しい文字列を返し、元の文字列は変更されません。 文字列の「balloon」を「boomerang」に変更して、これを示しましょう。
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!
同様にグローバル置換を行う方法。
The sub
と gsub
メソッドは、検索パターンに正規表現を受け入れます。 文字列内のすべての母音を @
シンボル:
"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つのバリエーションがあることも学びました。1つは文字列を変更しないままにする方法、もう1つは元の文字列を変更する方法です。 どちらを使用するかは、ニーズによって異なります。 Rubyを使用すると、データの操作方法を柔軟に選択できます。 ただし、既存のデータを変更しないコードを作成すると、後でデバッグする方が簡単な場合があります。
Rubyでデータを操作する方法を引き続き検討するには、これらの関連チュートリアルを必ず確認してください。