对大多数C#程序员来说字符串处理是很常见的工作。
.NET Framework为处理字符串提供了很多的工具,但是必须特别注意,因为有几个陷阱会绊倒初学者。
首先要注意的是在.NET中string是引用类型。
在.NET中引用类型是存放在托管堆中。所以他们被.NET的垃圾回收器管理着。与值类型不同的是,当他们超出范围,他们不会自动销毁。
使用下面的语法字符串可以很简单的被实例化:
string s1;
注意string没有默认值。因此在试图访问它之前你需要为string赋值。
string s1;
Literal1.Text = s1; //Will give run-time error 运行错误
1 string s2 = " ";
2 Literal1.Text = s2; //你可以为字符串赋一个空值。
在.NET framework中有许多的内置方法可以用来处理字符串。也就是说,字符串是不可变的并且因此原始字符串永远不会改变。
因此如果你需要修改字符串,你需要给他重新分配使用一个新字符串值:
1 string s1 = "all lower case";
2 s1.ToUpper() ; //s1 is unchanged
3 Literal1.Text = s1; //outputs 'all lower case' since s1 is unchanged
4
5 string s2 = "all lower case";
6 s2 = s2.ToUpper() ; //s2 is now re-assigned the new uppercase string
7 Literal2.Text = s2; //outputs 'ALL LOWER CASE'
有关字符串不变性的详细请参见字符串是不可变
字符串连接
C#为字符串提供了一个方便的连接方法:使用‘+’:
1 string s1 = "Hong ";
2 string s2 = "Kong";
3 Literal1.Text = s1 + s2;
虽然这个方法很放便,但它不是有效执行大量串联的的方法。(由于字符串是不可变的,每次的连接结果引用类型在托管堆中都要创建一个额外的字符串。
它会存留在内存中,并且不会自动销毁,直到垃圾收集器将其销毁)
为了避开这个限制.NET Framework提供了StringBuilder类,可以有效地使用它的append()方法来连接字符串:
StringBuilder sb = new StringBuilder();
sb.Append("Hong ");
sb.Append("Kong");
通过测试,在连接2个字符串的时候不会有任何节省任何内存(实际上这可能会占用更多的内存,因为StringBuilder消耗内存)
一般而言,通常当连接字符串超过4个时应当使用StringBuilder 。
转义字符
与其他基于C的语言一样,C#字符串可能包含转义字符,应该如何输出,转义字符用/(反斜杠)开始遵循一个特定的字符 。
下面列出的各种转义字符和它们的输出:
\' 插入一个单引号
\“ 双引号插入
\ \ 插入一个反斜杠
\a 触发系统警报
\n 插入一个新行(Windows系统)
\ r 插入一个回车
\ t 插入一个水平制表符
逐字字符串
为了保持一个字符串,在字符串的起始地方只需添加一个@符号。
例如:
1 string outputStr = "This site is named \'C# Help\' ";
2 Response.Write(outputStr);
输出:
1 This site is named 'C# Help'
为了输出逐字字符串,在字符串的起始处添加@
1 string outputStr = @"This site is named \'C# Help\' ";
2 Response.Write(outputStr);
输出:
This site is named \'C# Help\'
请注意,空白将保留:
1 string outputStr = @"This is a broken
2 up
3 string";
|