LoginSignup
0
0

More than 3 years have passed since last update.

[Ruby]文字列で使えるメソッド

Posted at

文字列の置換

  • 文字列.sub(/変換した文字/,"置き換えたい文字列)・・・一番最初の文字のみ変換
irb(main):026:0> str
=> "123123123"
irb(main):027:0> str.sub(/12/,"ab")
=> "ab3123123"
irb(main):028:0> str
=> "123123123"

12と言う文字をabと変換したらab3123123と置換された
ただしインスタンス自体は置換されていない

  • 文字列.gsub(/変換した文字/,"置き換えたい文字列)・・・対応したすべての文字を変換 gはグローバルの意味
irb(main):029:0> str.gsub(/12/,"ab")
=> "ab3ab3ab3"

これも同様にインスタンス自体は置換されない

  • 文字列.sub!(/変換した文字/,"置き換えたい文字列)・・・元のインスタンス自体の一番最初の文字のみ変えてしまう

!は破壊的メソッド・・・インスタンス自体を変換してしまう

irb(main):030:0> str.sub!(/12/,"ab")
=> "ab3123123"
irb(main):031:0> str
=> "ab3123123"
  • 文字列.gsub!(/変換した文字/,"置き換えたい文字列)・・・元の変数自体をすべての文字を変えてしまう
irb(main):034:0> str = "123123123"
=> "123123123"
irb(main):035:0> str.gsub!(/12/,"ab")
=> "ab3ab3ab3"
irb(main):036:0> str
=> "ab3ab3ab3"

文字列の検索

  • 文字列.index("検索したい文字列”)・・・検索してどこに検索したい文字列があるか教えてくれる
irb(main):038:0> "12345".index("2")
=> 1

もちろん変数に格納された文字列も検索できる

irb(main):041:0> str = "abcde"
=> "abcde"
irb(main):042:0> str.index("c")
=> 2

これを見て、”12345”で”2”を検索しているのに”1”っておかしくないと思いましたよね?
格納された要素は添字といった番号を割り振られます
添字は0からスタートするので”12345”と言う文字列は”1”から番号が割り振られるのではなく、”0”から割り振られるます
だから”2”の検索結果が”1”となった訳です

文字列の削除

  • 文字列.delete(”削除したい文字列”)・・・指定された文字列の削除
  • 文字列.delete!(”削除したい文字列”)・・・(インスタンスからも)指定した文字列の削除
irb(main):044:0> str.delete("cd")
=> "abe"
irb(main):045:0> str
=> "abcde"

当然!をつけると破壊的メソッドになるのでインスタンスも変化(削除)されてしまう

  • 文字列.chop・・・文字列の行末を削除できる
irb(main):049:0> str.chop
=> "abcd"

これも!を付けると破壊的メソッドになる

  • 文字列.chomp・・・改行コードも削除できる

例えばchomoなしでgetsを利用して文字列入力すると

irb(main):054:0> gets.to_s
私の名前は太郎
=> "私の名前は太郎\n"

と\nと改行コードが組み込まれてします

それをchompを利用すると

irb(main):053:0> gets.to_s.chomp
私の名前はたろう
=> "私の名前はたろう"

\nが組み込まれない

文字の分割して配列を作成

文字列.split

irb(main):055:0> "aa bb cc".split
=> ["aa", "bb", "cc"]

空白を入れると分割されて配列が作成される
余談ですが、railsでタグ機能を作る時にgemなしの場合splitを使用して複数作ります(経験談)
これは文字を指定して分割する事も可能で、例えば","なら

文字列.split(",")でカンマを指定してして分割出来ます

例:
irb(main):058:0> "aa,bb,cc".split(",")
=> ["aa", "bb", "cc"]

逆に作った配列を文字列に戻す方法は
配列.joinを使います

例:whatの中に先ほどの入れる["aa", "bb", "cc"]が格納されております
irb(main):059:0> what.join
=> "aabbcc"

配列.join(" ")と指定してあげると

irb(main):061:0> what.join(" ")
=> "aa bb cc"

と分割された状態で文字列に戻します

文字列の変換

文字列.upcase・・・大文字に変換
文字列.downcase・・・小文字に変換

irb(main):063:0> length = "aaa"
=> "aaa"
irb(main):064:0> length.upcase
=> "AAA"
irb(main):065:0> length.upcase!
=> "AAA"
irb(main):066:0> length
=> "AAA"
irb(main):067:0> length.downcase
=> "aaa"
irb(main):068:0> length.downcase!
=> "aaa"
irb(main):069:0> length
=> "aaa"

文字列.reverse・・・文字列を左右反転

irb(main):072:0> length = "abc"
=> "abc"
irb(main):073:0> length.reverse
=> "cba"

文字列.slice(範囲)・・・文字列を指定した範囲を切り取ってくれる

irb(main):076:0> length = "abcdef"
=> "abcdef"
irb(main):077:0> length.slice(2..4)
=> "cde"

2〜4までの範囲の文字列cdeを切り取ってくれました
このslice(2..4)の..は範囲をしているする時に使います

最後

ノートにあったものを片っ端からまとめてみました
もしかしたら解釈が間違えているかもしれませんのでもしよかったらご指摘お願いします

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0