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 {
String class
public sealed class String ... {
...
}
}
3
String alias
• C# provides string as convenient alias for System.String
equivalent
string s;
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' };
entire array
string a = new string(t);
string b = new string(t, 0, 2);
first 2 characters
string c = new string('z', 3);
given character 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 \
linefeed
double quote
string a = "hello\n";
backslash
string b = "\"";
string c = "C:\\WINDOWS";
...
7
Verbatim string literal
• Can create verbatim string literal
– precede with @ – helps reduce need for escape sequences
verbatim
string path = @"C:\WINDOWS\Config";
8
String length
• String provides read only Length property
length will be 5
string s = "hello";
int l = s.Length;
9
String indexer
• String provides read only indexer
– indices start at zero
retrieve 'o'
string s = "hello";
char c = s[4];
10
String comparison
• String provides several ways to perform comparison
– all have value semantics
string a = "bike"; string b = "bit";
three way comparison, used for ordering
if (a.CompareTo(b) < 0)
equality
...
if (a.Equals(b))
equality
...
if (a == b)
inequality
...
if (a != b)
...
11
String concatenation
• String concatenation supported
– operator + – operator +=
string a = "holly"; string b = "wood";
operator +
string c = a + b;
operator +=
string d = "tom";
d += "cat";
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, assign to reference
d += "cat";
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 object each iteration
text += Console.ReadLine();
}
14
StringBuilder class
• Framework Class Library provides StringBuilder class
– in System.Text namespace – represents mutable sequence of characters
namespace System.Text {
StringBuilder class
public sealed class StringBuilder {
...
}
}
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("
hello");modify
text.Remove(12, 4);
text.Insert(12, "/bode");
text[16] = 'y';
text
hello
16
StringBuilder internally managed capacity
• StringBuilder adjusts capacity to accommodate contents
– no need for user interaction
capacity increased as needed
StringBuilder text = new StringBuilder();
text.Append(""); text.Append("
"); text.Append(""); text.Append("hello"); ... text.Append("
"); text.Append(""); text.Append("");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
capacity of 100
capacity of 200
StringBuilder a = new StringBuilder(100);
a.Capacity = 200;
18
StringBuilder typical usage
• StringBuilder typically used to create desired sequence
– result is then converted to string using ToString
create
string Create() {
StringBuilder text = new StringBuilder();
convert
text.Append(""); text.Append("
"); text.Append(""); text.Append("hello"); ...
return text.ToString();
}