首页 > 编程笔记 > C#笔记 阅读:14

C# StringBuilder的用法(非常详细,附带实例)

C# 程序中使用 String 类创建字符串时,字符串内容是不可变的,但是因为每次执行特定方法后,都有新字符串产生,所以如果频繁使用就会大大地增加系统的负荷。

C# 提供了另一种字符串类 StringBuilder,这个类最大的特色是字符串声明后,未来还可以更改字符串的内容,如果需要频繁更改字符串内容的话,这个类的方法可以增加系统效率。

StringBuilder 类在 System.Text 命名空间内,所以在声明此类前需要使用 using 引用此命名空间:
using System.Text;
基础的声明 StringBuilder 字符串变量的方法如下:
StringBuilder strBuilder = new StringBuilder(str);        //不设定字符串容量
StringBuilder strBuilder = new StringBuilder(str, capacity);//设定字符串容量
上述语句中 strBuilder 是字符串变量名称,str 是字符串内容,capacity 是指字符串容量,如果省略 capacity 则使用默认长度 16,如果容量不够则会自动翻倍。如果增加了 capacity 参数,则表示会设定此字符串的容量。

例如,声明 StringBuilder 字符串变量,然后输出:
using System.Text;

StringBuilder strBuilder1 = new StringBuilder("DeepMind");
Console.WriteLine(strBuilder1);
StringBuilder strBuilder2 = new StringBuilder("Deepen your mind", 32);
Console.WriteLine(strBuilder2);
执行结果为:

DeepMind
Deepen your mind

C# StringBuilder的属性

StringBuilder 字符串的属性有下列几种:
【实例】认识 StringBuilder 字符串变量的属性。
using System.Text;

StringBuilder strBuilder = new StringBuilder("War and Peace");
int len = strBuilder.Length;
int cap = strBuilder.Capacity;
int maxCap = strBuilder.MaxCapacity;
Console.Write("原始字符串    :");
for (int i = 0; i < len; i++)
    Console.Write(strBuilder[i]);
Console.WriteLine();
Console.WriteLine($"字符串长度    :{len}");
Console.WriteLine($"字符串容量    :{cap}");
Console.WriteLine($"字符串最大容量:{maxCap}");
执行结果为:

原始字符串    :War and Peace
字符串长度    :13
字符串容量    :16
字符串最大容量:2147483647

C# StringBuilder类常用的方法

StringBuilder 的方法主要是更改对象的内容,而不会回传对象。下表是 StringBuilder 常用的方法。

方法 说明
ToString() 将 StringBuilder 对象转为 String 字符串。
Clear() 清除字符串。
Append() 将指定内容加到对象末端。
Insert() 将指定内容插入对象。
Replace() 用指定内容替换对象部分内容。

1) ToString()

ToString() 方法可以将 StringBuilder 字符串转为 String 字符串,此方法的语法如下:
strBuilder.ToString(); // strBuilder是StringBuilder对象

【实例】将 StringBuilder 字符串转为 String 字符串,然后输出:
using System.Text;

StringBuilder strBuilder = new StringBuilder("War and Peace");
Console.WriteLine($"StringBuilder类的字符串输出:{strBuilder}");
String str = strBuilder.ToString();
Console.WriteLine($"String类的字符串输出:{str}");
执行结果为:

StringBuilder类的字符串输出:War and Peace
String类的字符串输出:War and Peace

2) Clear()

Clear() 方法可以清除 StringBuilder 字符串,但是此字符串仍存在,只是变成长度是 0,没有内容的字符串,此方法的语法如下:
strBuilder.Clear()    // strBuilder是StringBuilder对象

【实例】清除字符串 Clear() 的应用。
using System.Text;

StringBuilder strBuilder = new StringBuilder("War and Peace");
Console.WriteLine($"字符串内容:{strBuilder}");
Console.WriteLine($"字符串长度:{strBuilder.Length}");
strBuilder.Clear();
Console.WriteLine("执行Clear()后");
Console.WriteLine($"字符串内容:{strBuilder}");
Console.WriteLine($"字符串长度:{strBuilder.Length}");
执行结果为:

字符串内容:War and Peace
字符串长度:13
执行Clear()后
字符串内容:
字符串长度:0

3) Append()

Append() 方法可以将指定内容加到 StringBuilder 对象末端,Append() 方法是基础语法如下:
strBuilder.Append(str);    // strBuilder是StringBuilder对象

上述语句会将 str 加到 strBuilder 对象末端,如果 str 是字符,可以增加第 2 个整数 Int32 参数,注明字符重复次数(repeats),此时语法如下:
strBuilder.Append(ch, repeats);    // 将ch字符重复repeats次

【实例】Append() 方法的应用。
using System.Text;

StringBuilder novel = new StringBuilder("War and Peace");
StringBuilder star = new StringBuilder("*****");
StringBuilder result1 = new StringBuilder("");
result1.Append(star);
result1.Append(novel);
result1.Append(star);
Console.WriteLine(result1);

// 另一种方式处理 Append() 方法
StringBuilder result2 = new StringBuilder("");
Console.WriteLine(result2.Append(star).Append(novel).Append(star));
执行结果为:

*****War and Peace*****
*****War and Peace*****

4) Insert()

Insert() 方法的用法有许多,最常见的应用是在指定索引处插入字符串,此时语法如下:
strBuilder.Insert(offset, char[] str);
经过上述插入后,字符串 Builder 内容会更新。

【实例】5 颗星评鉴 War and Peace 小说的应用,这个程序使用了 Insert() 和 Append() 方法。
using System.Text;

StringBuilder novel = new StringBuilder("War and Peace");
Console.WriteLine($"原始字符串:{novel}");
novel.Insert(0, "*****");    // 使用 Insert()
Console.WriteLine($"第 1 次插入结果:{novel}");
novel.Append("*****");    // 使用 Append()
Console.WriteLine($"第 2 次插入结果:{novel}");
执行结果为:

原始字符串:War and Peace
第 1 次插入结果:*****War and Peace
第 2 次插入结果:*****War and Peace*****

5) Replace()

Replace() 的功能是用新字符或是新字符串替换旧字符或旧字符串,此方法的用法如下:
strBuilder.Replace(oldChar, newChar);    // 所有oldChar用newChar替换
strBuilder.Replace(oldStr, newStr);    // 所有oldStr用newStr替换

此外,也可以指定替换的位置和长度,而不是全部替换,语法如下:
strBuilder.Replace(oldChar, newChar, Int32, Int32);
strBuilder.Replace(oldStr, newStr, Int32, Int32);
上述语句中第 1 个 Int32 是指在这个索引位置进行替换,第 2 个 Int32 是长度,其意义也就是在指定位置长度区间,如果出现 oldChar/oldStr 则用 newChar/newStr 替换。

【实例】将全部的文章改为教程。
using System.Text;

var sentence = "C#文章和C语言文章";
var strBuilder = new StringBuilder(sentence);
Console.WriteLine($"原始字符串:{strBuilder}");
strBuilder.Replace("文章", "教程");
Console.WriteLine($"替换结果:{strBuilder}");
执行结果为:

原始字符串:C#文章和C语言文章
替换结果:C#教程和C语言教程

上述程序笔者故意使用 var 声明是在提醒读者可以使用这类方式声明。

相关文章