C#Strings-Getting Started with Strings

                        对大多数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";

  

  

 初次将看过的英文文章翻译成中文,英文水平有限,为学习特此翻译了一篇简单文章,希望自己能坚持下去。如果问题请大家包涵指正。 
原文地址:http://www.csharphelp.com/2011/06/c-strings-getting-started-with-strings/

posted @ 2011-08-11 11:50  Seonwater Lee  阅读(238)  评论(0编辑  收藏  举报