C# 字符串是使用 string 关键字声明的一个字符数组。字符串是使用引号声明的,如下例所示:
| C# |  复制代码 | 
|---|---|
| string s = "Hello, World!"; | |
您可以提取子字符串和连接字符串,如下所示:
| C# |  复制代码 | 
|---|---|
| string s1 = "orange"; string s2 = "red"; s1 += s2; System.Console.WriteLine(s1); // outputs "orangered" s1 = s1.Substring(2, 5); System.Console.WriteLine(s1); // outputs "anger" | |
字符串对象是“不可变的”,即它们一旦创建就无法更改。对字符串进行操作的方法实际上返回的是新的字符串对象。在前面的示例中,将 s1 和 s2 的内容连接起来以构成一个字符串时,包含 "orange" 和 "red" 的两个字符串均保持不变。+= 运算符会创建一个包含组合内容的新字符串。结果是 s1 现在引用一个完全不同的字符串。只包含 "orange"  的字符串仍然存在,但连接 s1 后将不再被引用。
因此,出于性能方面的原因,大量的连接或其他涉及字符串的操作应当用 
| C# |  复制代码 | 
|---|---|
| System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("one ");
sb.Append("two ");
sb.Append("three");
string str = sb.ToString();
 | |
StringBuilder 类在“使用 Stringbuilder”一节中有进一步的讨论。
使用字符串
转义符
字符串中可以包含转义符,如“\n”(新行)和“\t”(制表符)。行:
| C# |  复制代码 | 
|---|---|
| string hello = "Hello\nWorld!"; | |
等同于:
                                  Hello
                                
                                  World!
                                
如果希望包含反斜杠,则它前面必须还有另一个反斜杠。下面的字符串:
| C# |  复制代码 | 
|---|---|
| string filePath = "\\\\My Documents\\"; | |
实际上等同于:
                                  \\My Documents\
                                
@ 符号
@ 符号会告知字符串构造函数忽略转义符和分行符。因此,以下两个字符串是完全相同的:
| C# |  复制代码 | 
|---|---|
| string p1 = "\\\\My Documents\\My Files\\"; string p2 = @"\\My Documents\My Files\"; | |
ToString()
如同所有从 
| C# |  复制代码 | 
|---|---|
| int year = 1999; string msg = "Eve was born in " + year.ToString(); System.Console.WriteLine(msg); // outputs "Eve was born in 1999" | |
访问各个字符
字符串中所包含的各个字符可以使用以下方法进行访问,如 SubString()、Replace(),、Split() 和 Trim()。
| C# |  复制代码 | 
|---|---|
| string s3 = "Visual C# Express";
System.Console.WriteLine(s3.Substring(7, 2));         // outputs "C#"
System.Console.WriteLine(s3.Replace("C#", "Basic"));  // outputs "Visual Basic Express"
 | |
也可以将字符复制到字符数组,如下所示:
| C# |  复制代码 | 
|---|---|
| string s4 = "Hello, World";
char[] arr = s4.ToCharArray(0, s4.Length);
foreach (char c in arr)
{
    System.Console.Write(c);  // outputs "Hello, World"
}
 | |
可以用索引访问字符串中的各个字符,如下所示:
| C# |  复制代码 | 
|---|---|
| string s5 = "Printing backwards";
for (int i = 0; i < s5.Length; i++)
{
    System.Console.Write(s5[s5.Length - i - 1]);  // outputs "sdrawkcab gnitnirP"
}
 | |
更改大小写
若要将字符串中的字母更改为大写或小写,可以使用 ToUpper() 或 ToLower(),如下所示:
| C# |  复制代码 | 
|---|---|
| string s6 = "Battle of Hastings, 1066"; System.Console.WriteLine(s6.ToUpper()); // outputs "BATTLE OF HASTINGS 1066" System.Console.WriteLine(s6.ToLower()); // outputs "battle of hastings 1066" | |
比较
比较两个字符串的最简单方法是使用 == 和 != 运算符,执行区分大小写的比较。
| C# |  复制代码 | 
|---|---|
| string color1 = "red";
string color2 = "green";
string color3 = "red";
if (color1 == color3)
{
    System.Console.WriteLine("Equal");
}
if (color1 != color2)
{
    System.Console.WriteLine("Not equal");
}
 | |
字符串对象也有一个 CompareTo() 方法,它根据某个字符串是否小于 (<) 或大于 (>) 另一个,返回一个整数值。比较字符串时使用 Unicode 值,小写的值小于大写的值。
| C# |  复制代码 | 
|---|---|
| string s7 = "ABC";
string s8 = "abc";
if (s7.CompareTo(s8) > 0)
{
    System.Console.WriteLine("Greater-than");
}
else
{
    System.Console.WriteLine("Less-than");
}
 | |
若要在一个字符串中搜索另一个字符串,可以使用 IndexOf()。如果未找到搜索字符串,IndexOf() 返回 -1;否则,返回它出现的第一个位置的索引(从零开始)。
| C# |  复制代码 | 
|---|---|
| string s9 = "Battle of Hastings, 1066";
System.Console.WriteLine(s9.IndexOf("Hastings"));  // outputs 10
System.Console.WriteLine(s9.IndexOf("1967"));      // outputs -1
 | |
将字符串拆分为子字符串
将字符串拆分为子字符串(如将句子拆分为各个单词)是一个常见的编程任务。Split() 方法使用分隔符(如空格字符)char 数组,并返回一个子字符串数组。您可以使用 foreach 访问此数组,如下所示:
| C# |  复制代码 | 
|---|---|
| char[] delimit = new char[] { ' ' };
string s10 = "The cat sat on the mat.";
foreach (string substr in s10.Split(delimit))
{
    System.Console.WriteLine(substr);
}
 | |
此代码将在单独的行上输出每个单词,如下所示:
                                  The
                                
                                  cat
                                
                                  sat
                                
                                  on
                                
                                  the
                                
                                  mat.
                                
使用 StringBuilder
StringBuilder 类创建了一个字符串缓冲区,用于在程序执行大量字符串操作时提供更好的性能。StringBuilder 字符串还允许您重新分配个别字符,这些字符是内置字符串数据类型所不支持的。例如,此代码在不创建新字符串的情况下更改了一个字符串的内容:
| C# |  复制代码 | 
|---|---|
| System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet");
sb[0] = 'C';
System.Console.WriteLine(sb.ToString());
System.Console.ReadLine();
 | |
在本示例中,StringBuilder 对象用于从一组数值类型中创建字符串:
| C# |  复制代码 | 
|---|---|
| class TestStringBuilder
{
    static void Main()
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        // Create a string composed of numbers 0 - 9
        for (int i = 0; i < 10; i++)
        {
            sb.Append(i.ToString());
        }
        System.Console.WriteLine(sb);  // displays 0123456789
        // Copy one character of the string (not possible with a System.String)
        sb[0] = sb[9];
        System.Console.WriteLine(sb);  // displays 9123456789
    }
}
 | |
有关更多信息
在 C# 程序员参考中:
 
      
    
     
      
    
     
      
    
    