Strings

Ref. WGR Chapter 8, Section 8.1, Working with strings

String literals

substrings

s = "Ruby rocks"
s[5]    #=> "r"
s[5,3]  #=> "roc"
s[5,100]  #=> "rocks"
s[-3]   #=> "c"
s[2..6] #=> "by ro"

substring matching

s = "Ruby rocks"
s[/r../] #=> "roc"
s[/r../i] #=> "Rub"

substring setting

s = "Ruby rocks"
s["rock"] = "rule"
s #=> "Ruby rules"

adding strings

plus makes a new string

s = "dog"
s + "cow"  #=> "dogcow"
s          #=> "dog"

shovel changes the original string

s = "dog"
s << "cow" #=> "dogcow"
s          #=> "dogcow"

plus-equal makes a new string but changes the variable

s = "dog"
s += "cow" #=> "dogcow"
s          #=> "dogcow"

string interpolation

Takes any ruby expression, calls to_s on it, and smooshes it inside a string

"nothing compares #{1+1} u" #=> "nothing compares 2 u"

anything can go in there, including operators and quotes

"i love #{@girlfriend or "nobody"}"

string comparison

Strings are == if their characters are the same

"alice" == "alice"  #=> true

Characters are compared in ASCII order (not Unicode or Collation order)

"a" < "b"    #=> true
"a" < "Z"    #=> false

The "flying saucer" operator is used for sorting

"a" <=> "b"  #=> -1
["d", "o", "g"].sort #=> ["d", "g", "o"]

gsub

gsub munges a string

s = "rubber baby buggy bumpers"
s.gsub(/b/, "g")
s #=> "rugger gagy guggy gumpers"

split

split turns a string into an array

"apple banana cherry".split
=> ["apple", "banana", "cherry"]

join

join turns an array into a string

["apple", "banana", "cherry"].join
=> "applebananacherry"
["apple", "banana", "cherry"].join(' ')
=> "apple banana cherry"

Core Mungers Summary

Method turns a(n)... into a(n)...
split String Array
join Array String
gsub String String
map Array Array

more string methods

some of these have ! versions which modify the string in place

Encodings

history of unicode

lots of ways to declare a string

weird string literals

Multiline strings

newlines do not end a string

"Now is the winter of our discontent
made glorious summer by this son of York."

=> ruby "now is the winter of our discontent\nmade glorious summer by this son of York."

Here Docs

first_quatrain = <<END
My mistress' eyes are nothing like the sun;
Coral is far more red than her lips' red;
If snow be white, why then her breasts are dun;
If hairs be wires, black wires grow on her head.
END

Here docs with indentation

def second_quatrain
  x = <<-HTML
    <blockquote>
      I have seen roses damask'd, red and white,
      But no such roses see I in her cheeks;
      And in some perfumes is there more delight
      Than in the breath that from my mistress reeks.
    </blockquote>
  HTML
  x
end

Here docs don't have to end the expression

x = <<-NUM.to_i * 10
5
NUM
x  # => 50

Weird, huh?

 Previous Lesson Next Lesson 

Outline

[menu]

/