A.15. Chapter 15: Strings A.15.1. Quiz -
Solution to Question 151 . -
string (lowercase) is the C# keyword that maps to the .NET Framework String class. They may be used interchangeably. -
Solution to Question 152 . -
-
IComparable -
Guarantees that strings can be sorted -
ICloneable -
Guarantees that you can call the Clone method on a string object and get back a new duplicate string -
IConvertible -
Allows strings to be converted to other types (such as integers) -
IEnumerable -
Guarantees that strings can be iterated over in foreach loops -
Solution to Question 153 . -
A quoted string, provided by the programmer, such as "Hello." -
Solution to Question 154 . -
An escape character embedded in a string indicates that the character or punctuation that follows is to be treated as an instruction rather than as part of the string. \n indicates a new line. \" indicates that the quote symbol is in the string, not terminating it. -
Solution to Question 155 . -
Verbatim strings are taken "as is" and thus do not require escape characters . Where \\ would indicate a single backslash in a normal string, in a verbatim string, it indicates two backslashes. -
Solution to Question 156 . -
Strings cannot be changed. When you appear to change a string, what actually happens is that a new string is created and the old string is destroyed by the garbage collector if it is no longer referenced. -
Solution to Question 157 . -
It is not possible to derive from the String class (or any other sealed class). -
Solution to Question 158 . -
You can call the Concat method of the String class, but it is more common to use the overloaded + operator. -
Solution to Question 159 . -
Given an array of delimiters, Split( ) returns the substrings of the original string. -
Solution to Question 1510 . -
StringBuilder objects are mutable. When the StringBuilder has the complete set of characters you want, you call ToString( ) to get back a string object. -
Solution to Question 1511 . -
Regular expressions constitute a language for identifying and manipulating strings using both literal and metacharacters. A.15.2. Exercises -
Solution to Exercise 15-1 . -
Create the following six strings: -
String 1: "Hello" -
String 2: "World" -
String 3 (a verbatim string): "Come visit us at http://www.LibertyAssociates.com" -
String 4: a concatenation of strings 1 and 2 -
String 5: "world" -
String 6: a copy of string 3 Once you have the strings created, do the following: -
Output the length of each string. -
Output the third character in each string. -
Output whether the character "H" appears in each string. -
Output which strings are the same as string 2. -
Output which strings are the same as string 2, ignoring case. using System; namespace StringManipulation { class Tester { public void Run( ) { string s1 = "Hello "; string s2 = "World"; string s3 = @"Come visit us at http://www.LibertyAssociates.com"; string s4 = s1 + s2; string s5 = "world"; string s6 = string.Copy( s3 ); Console.WriteLine("Here's how long our strings are..."); Console.WriteLine( "s1: {0} [{1}]", s1.Length, s1 ); Console.WriteLine( "s2: {0} [{1}]", s2.Length, s2 ); Console.WriteLine( "s3: {0} [{1}]", s3.Length, s3 ); Console.WriteLine( "s4: {0} [{1}]", s4.Length, s4 ); Console.WriteLine( "s5: {0} [{1}]", s5.Length, s5 ); Console.WriteLine( "s6: {0} [{1}]", s6.Length, s6 ); Console.WriteLine( "\nHere's the third character in each string..." ); Console.WriteLine( "s1: {0} [{1}]", s1[2], s1 ); Console.WriteLine( "s2: {0} [{1}]", s2[2], s2 ); Console.WriteLine( "s3: {0} [{1}]", s3[2], s3 ); Console.WriteLine( "s4: {0} [{1}]", s4[2], s4 ); Console.WriteLine( "s5: {0} [{1}]", s5[2], s5 ); Console.WriteLine( "s6: {0} [{1}]", s6[2], s6 ); Console.WriteLine( "\nIs there an h in the string?" ); Console.WriteLine( "s1: {0} [{1}]", s1.ToUpper( ).IndexOf( 'H' ) >= 0 ? "yes" : "nope", s1 ); Console.WriteLine( "s2: {0} [{1}]", s2.ToUpper( ).IndexOf( 'H' ) >= 0 ? "yes" : "nope", s2 ); Console.WriteLine( "s3: {0} [{1}]", s3.ToUpper( ).IndexOf( 'H' ) >= 0 ? "yes" : "nope", s3 ); Console.WriteLine( "s4: {0} [{1}]", s4.ToUpper( ).IndexOf( 'H' ) >= 0 ? "yes" : "nope", s4 ); Console.WriteLine( "s5: {0} [{1}]", s5.ToUpper( ).IndexOf( 'H' ) >= 0 ? "yes" : "nope", s5 ); Console.WriteLine( "s6: {0} [{1}]", s6.ToUpper( ).IndexOf( 'H' ) >= 0 ? "yes" : "nope", s6 ); Console.WriteLine( "\nWhich strings are the same as s2 [{0}]?", s2 ); Console.WriteLine( "s1: {0} [{1}]", String.Compare( s1, s2 ) == 0 ? "Same!" : "Different", s1 ); Console.WriteLine( "s2: {0} [{1}]", String.Compare( s2, s2 ) == 0 ? "Same!" : "Different", s2 ); Console.WriteLine( "s3: {0} [{1}]", String.Compare( s3, s2 ) == 0 ? "Same!" : "Different", s3 ); Console.WriteLine( "s4: {0} [{1}]", String.Compare( s4, s2 ) == 0 ? "Same!" : "Different", s4 ); Console.WriteLine( "s5: {0} [{1}]", String.Compare( s5, s2 ) == 0 ? "Same!" : "Different", s5 ); Console.WriteLine( "s6: {0} [{1}]", String.Compare( s6, s2 ) == 0 ? "Same!" : "Different", s6 ); Console.WriteLine( "\nWhich strings are the same as s2 [{0}] ignoring case ?", s2 ); Console.WriteLine( "s1: {0} [{1}]", String.Compare( s1, s2, true ) == 0 ? "Same!" : "Different", s1 ); Console.WriteLine( "s2: {0} [{1}]", String.Compare( s2, s2, true ) == 0 ? "Same!" : "Different", s2 ); Console.WriteLine( "s3: {0} [{1}]", String.Compare( s3, s2, true ) == 0 ? "Same!" : "Different", s3 ); Console.WriteLine( "s4: {0} [{1}]", String.Compare( s4, s2, true ) == 0 ? "Same!" : "Different", s4 ); Console.WriteLine( "s5: {0} [{1}]", String.Compare( s5, s2, true ) == 0 ? "Same!" : "Different", s5 ); Console.WriteLine( "s6: {0} [{1}]", String.Compare( s6, s2, true ) == 0 ? "Same!" : "Different", s6 ); } static void Main( ) { Tester t = new Tester( ); t.Run( ); } } } -
Solution to Exercise 15-2 . -
Take the following string: We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty and the pursuit of Happiness. Use a regular expression to split the string into words: using System; using System.Text; using System.Text.RegularExpressions; namespace RegularExpressions { class Tester { public void Run( ) { string importantString = "We hold these truths to be self-evident, " + "that all men are created equal, " + "that they are endowed by their Creator with certain " + "unalienable Rights, that among " + "these are Life, Liberty and the pursuit of Happiness."; Regex theRegex = new Regex( " , ," ); StringBuilder sBuilder = new StringBuilder( ); int id = 1; foreach ( string subString in theRegex.Split( importantString ) ) { sBuilder.AppendFormat( "{0}: {1}\n", id++, subString ); } Console.WriteLine( "{0}", sBuilder ); } static void Main( ) { Tester t = new Tester( ); t.Run( ); } } } |