String
Objectives Discuss string handling • – System.String class – System.Text.StringBuilder class 2
String class • Framework Class Library provides System.String class – represents immutable sequence of characters namespace System { public sealed class String ... String class { ... } } 3
String alias • C# provides string as convenient alias for System.String string s; equivalent System.String t; 4
String creation String is a reference type • – created with new – constructors available for char and char[] char[] t = new char[5] { 'h', 'e', 'l', 'l', 'o' }; string a = new string(t); entire array string b = new string(t, 0, 2); first 2 characters given character string c = new string('z', 3); repeated 3 times a hello b he c zzz 5
String literals • String literals automatically converted into string objects – convenient shorthand for common case string object created string s = "hello"; s hello 6
Escape sequence Can include escape sequence in string • – precede special characters with \ string a = "hello\n"; linefeed string b = "\""; double quote string c = "C:\\WINDOWS"; backslash ... 7
Verbatim string literal Can create verbatim string literal • – precede with @ – helps reduce need for escape sequences string path = @"C:\WINDOWS\Config"; verbatim 8
String length • String provides read only Length property string s = "hello"; int l = s.Length; length will be 5 9
String indexer String provides read only indexer • – indices start at zero string s = "hello"; char c = s[4]; retrieve 'o' 10
String comparison String provides several ways to perform comparison • – all have value semantics string a = "bike"; string b = "bit"; three way comparison, if (a.CompareTo(b) < 0) used for ordering ... if (a.Equals(b)) equality ... if (a == b) equality ... if (a != b) inequality ... 11
String concatenation String concatenation supported • – operator + – operator += string a = "holly"; string b = "wood"; string c = a + b; operator + string d = "tom"; d += "cat"; operator += 12
String immutability Strings are immutable • – no way to modify contents • Operations which seem to modify string do not – actually create new object to represent new value string d = "tom"; create new object, d += "cat"; assign to reference d tom tomcat 13
String inefficiency Strings can be inefficient when used for concatenation • – may create and destroy many intermediate objects string text = ""; for (int i = 0; i < 10; i++) { may create new text += Console.ReadLine(); object each iteration } 14
StringBuilder class • Framework Class Library provides StringBuilder class – in System.Text namespace – represents mutable sequence of characters namespace System.Text { public sealed class StringBuilder StringBuilder class { ... } } 15
StringBuilder mutability • StringBuilder provides mutator methods – change contents of existing object – can be more efficient than string for concatenation StringBuilder text = new StringBuilder(); text.Append("<body>hello<html>"); text.Remove(12, 4); modify text.Insert(12, "/bode"); text[16] = 'y'; text <body>hello</body> 16
StringBuilder internally managed capacity • StringBuilder adjusts capacity to accommodate contents – no need for user interaction StringBuilder text = new StringBuilder(); text.Append("<html>"); text.Append("<body>"); text.Append("<p>"); capacity increased text.Append("hello"); as needed ... text.Append("</p>"); text.Append("</body>"); text.Append("</html>"); 17
StringBuilder user managed capacity • StringBuilder allows user some control over capacity – initial capacity during construction – read/write Capacity property • Explicit management of capacity can be efficient – if final length of string is known ahead of time StringBuilder a = new StringBuilder(100); capacity of 100 a.Capacity = 200; capacity of 200 18
StringBuilder typical usage • StringBuilder typically used to create desired sequence – result is then converted to string using ToString string Create() { create StringBuilder text = new StringBuilder(); text.Append("<html>"); text.Append("<body>"); text.Append("<p>"); text.Append("hello"); ... return text.ToString(); convert } 19
Summary .NET Framework Class Library has two string classes • – String – StringBuilder • String is primary class – offers most services – is most convenient to use • StringBuilder is more specialized – targeted toward creating string from pieces 20
Recommend
More recommend