Section 2.15. Converting Between Characters and ASCII Codes


2.14. Searching a String

Besides the techniques for accessing substrings, there are other ways of searching within strings. The index method returns the starting location of the specified substring, character, or regex. If the item is not found, the result is nil:

str = "Albert Einstein" pos1 = str.index(?E)        # 7 pos2 = str.index("bert")    # 2 pos3 = str.index(/in/)      # 8 pos4 = str.index(?W)        # nil pos5 = str.index("bart")    # nil pos6 = str.index(/wein/)    # nil


The method rindex (right index) starts from the righthand side of the string (that is, from the end). The numbering, however, proceeds from the beginning as usual:

str = "Albert Einstein" pos1 = str.rindex(?E)       # 7 pos2 = str.rindex("bert")   # 2 pos3 = str.rindex(/in/)     # 13 (finds rightmost match) pos4 = str.rindex(?W)       # nil pos5 = str.rindex("bart")   # nil pos6 = str.rindex(/wein/)   # nil


The include? method simply tells whether the specified substring or character occurs within the string:

str1 = "mathematics" flag1 = str1.include? ?e         # true flag2 = str1.include? "math"     # true str2 = "Daylight Saving Time" flag3 = str2.include? ?s         # false flag4 = str2.include? "Savings"  # false


The scan method repeatedly scans for occurrences of a pattern. If called without a block, it returns an array. If the pattern has more than one (parenthesized) group, the array will be nested:

str1 = "abracadabra" sub1 = str1.scan(/a./) # sub1 now is ["ab","ac","ad","ab"] str2 = "Acapulco, Mexico" sub2 = str2.scan(/(.)(c.)/) # sub2 now is [ ["A","ca"], ["l","co"], ["i","co"] ]


If a block is specified, the method passes the successive values to the block:

str3 = "Kobayashi" str3.scan(/[^aeiou]+[aeiou]/) do |x|   print "Syllable: #{x}\n" end


This code produces the following output:

Syllable: Ko Syllable: ba Syllable: ya Syllable: shi





The Ruby Way(c) Solutions and Techniques in Ruby Programming
The Ruby Way, Second Edition: Solutions and Techniques in Ruby Programming (2nd Edition)
ISBN: 0672328844
EAN: 2147483647
Year: 2004
Pages: 269
Authors: Hal Fulton

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net