- 2.1 Representing Ordinary Strings
- 2.2 Representing Strings with Alternate Notations
- 2.3 Using Here-Documents
- 2.4 Finding the Length of a String
- 2.5 Processing a Line at a Time
- 2.6 Processing a Character or Byte at a Time
- 2.7 Performing Specialized String Comparisons
- 2.8 Tokenizing a String
- 2.9 Formatting a String
- 2.10 Using Strings as IO Objects
- 2.11 Controlling Uppercase and Lowercase
- 2.12 Accessing and Assigning Substrings
- 2.13 Substituting in Strings
- 2.14 Searching a String
- 2.15 Converting Between Characters and ASCII Codes
- 2.16 Implicit and Explicit Conversion
- 2.17 Appending an Item onto a String
- 2.18 Removing Trailing Newlines and Other Characters
- 2.19 Trimming Whitespace from a String
- 2.20 Repeating Strings
- 2.21 Embedding Expressions within Strings
- 2.22 Delayed Interpolation of Strings
- 2.23 Parsing Comma-Separated Data
- 2.24 Converting Strings to Numbers (Decimal and Otherwise)
- 2.25 Encoding and Decoding <tt>rot13</tt> Text
- 2.26 Encrypting Strings
- 2.27 Compressing Strings
- 2.28 Counting Characters in Strings
- 2.29 Reversing a String
- 2.30 Removing Duplicate Characters
- 2.31 Removing Specific Characters
- 2.32 Printing Special Characters
- 2.33 Generating Successive Strings
- 2.34 Calculating a 32-Bit CRC
- 2.35 Calculating the SHA-256 Hash of a String
- 2.36 Calculating the Levenshtein Distance Between Two Strings
- 2.37 Encoding and Decoding Base64 Strings
- 2.38 Expanding and Compressing Tab Characters
- 2.39 Wrapping Lines of Text
- 2.40 Conclusion
2.11 Controlling Uppercase and Lowercase
Ruby’s String class offers a rich set of methods for controlling case. This section offers an overview of these.
The downcase method converts a string to all lowercase. Likewise, upcase converts it to all uppercase. Here is an example each:
s1 = "Boston Tea Party" s2 = s1.downcase # "boston tea party" s3 = s2.upcase # "BOSTON TEA PARTY"
The capitalize method capitalizes the first character of a string while forcing all the remaining characters to lowercase:
s4 = s1.capitalize # "Boston tea party" s5 = s2.capitalize # "Boston tea party" s6 = s3.capitalize # "Boston tea party"
The swapcase method exchanges the case of each letter in a string:
s7 = "THIS IS AN ex-parrot." s8 = s7.swapcase # "this is an EX-PARROT."
There is also the casecmp method, which acts like the <=> method but ignores case:
n1 = "abc".casecmp("xyz") # -1 n2 = "abc".casecmp("XYZ") # -1 n3 = "ABC".casecmp("xyz") # -1 n4 = "ABC".casecmp("abc") # 0 n5 = "xyz".casecmp("abc") # 1
Each of these also has an in-place equivalent (upcase!, downcase!, capitalize!, and swapcase!).
There are no built-in methods for detecting case, but this is easy to do with regular expressions, as shown in the following example:
if string =~ /[a-z]/ puts "string contains lowercase characters" end if string =~ /[A-Z]/ puts "string contains uppercase characters" end if string =~ /[A-Z]/ and string =~ /a-z/ puts "string contains mixed case" end if string[0..0] =~ /[A-Z]/ puts "string starts with a capital letter" end
Regular expressions of this sort will only match ASCII characters. To match Unicode uppercase or lowercase characters, use a named character class, as shown here:
if string =~ /\p{Upper}/ puts "string contains uppercase Unicode characters like Ü" end
For more information about regular expressions, see Chapter 3, “Working with Regular Expressions.”