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();

}

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