4.1 文字列の構築


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

4.1.1 文字列リテラル


文字列リテラルとは、""や''で囲まれた文字列。Stringクラスのインスタンスです。

  1. "Hello" #=> "Hello"


4.1.2 バックスラッシュ記法

4.1.3 式展開

4.1.4 バッククォート文字列

4.1.5 パーセント記法

4.1.6 ヒアドキュメント


その他の話


配列から文字列を作る
  1. ["ab", "bc", "cd"].join("-") #=> "ab-bc-cd"
  2. [13, 45, 50].join(":") #=> "13:45:50"

ハッシュから文字列を作る

  1. hash = { "key1" => "val1", "key2" => "val2" }
  2. str = ""
  3. hash.each { |k,v| str << "#{k} is #{v}\n" }
  4. puts str
  5. # key1 is val1
  6. # key2 is val2

文字列から配列を作る
  1. "/usr/local/my/doc".split("/") #=> ["", "usr", "local", "my", "doc" ]


課題

0. 文字列を作る
str = "Hello"
puts str.dup
 
 


dupは、duplicateの略から名付けられたメソッドで、オブジェクトを複製することができます。
複製とは、まったく同じものをコピーして別の場所に保存することです。
この場合は、dupの必要はありません。

1. 式展開(変数の値を文字列の中で表示する)
num = 100
 str = "my number is #{num}"
puts str.dup
" # <= ここにどうぞ

同じく、dupの必要はありません。

2. 文字列リテラルを作る場合の、一重符('')と二重符("")の違いは?
シングルクオートだと式展開ができない


OK

3. 改行、タブを含めた文字列を作る
str = "hello Flippr"
puts str
puts "#{str},hello ruby"
text = %q|programming's fun! Flippr is "Awesome"|
puts "Hi.#{text}"


タブの意味がいまいち.....


ちょっとわかりにくかったですかね。
文字列内で、改行、タブを挿入するときは、エスケープ記号を使って、
"\n"(改行)
"\t"(タブ)
と書きます。



4. ヒアドキュメントを作る
s = <<EOS
this is heredocument
ruby is Object Oriented Script Language.
EOS
 
 

OK

5. message="This is SOS from Captain Jack"として、messageの文字列を逆さにする

逆さにするの意味がわかりません

そのままの意味でしたが、わかりにくかったですかね。
hello #=> olleh
です。

String#reverseというメソッドを使います。

"This is SOS from Captain Jack".reverse
 


6. messageをすべて大文字にする
puts message.upcase
 

OK

7. messageをすべて小文字にする
puts message.downcase
 

OK

8. messageを空白で区切り、単語の配列を取得する( #=> ["This", "is", "SOS", "from", "Captain", "Jack"]

message="this,is,SOS,captain,jack"
puts message.split(/,/)
 

OK

9. messageのすべての空白を'+'に置換する(gsubを使う)

puts "this is captain jack".gsub(/ /, "+")
 

OK

10. messageの先頭10文字からなる部分文字列を作る([]を使用)
def take_nchars(str,n)
  str.slice(/\A.{0,#{n}}/m)
end
 
puts take_nchars("this is captain jack",10)
 
[]を使った方法はわかりませんでした。


シンプルに、
puts str[0,10]
 
でOK.または、Rangeを使って、
puts str[0..9]
puts str[0...10]
 
と書くこともできます。
また、str.slice(0,10)とstr[0,10]は同じです

11. 整数1000を文字列化する
puts 1000.to_s
 

OK

12. "ping!"を10回繰り返した文字列を作る(*を使う)
puts "ping" *10
 
 
____
OK

13. "hello\n"という文字列から末尾の改行を取り除く
puts "hello\n".chomp
 
____
OK

14. システムコマンド"date"を実行して、現在時刻を得る
t=Time.now
puts t
 
 

現在時刻を得るという点では、Time.nowでもいいのですが、元の意図は、バッククオートを使って、システムコマンドを呼び出す方法でした。
puts `date`