初学者课程:字符串连接

连接:这是什么?

连接就是把某些东西串在一起,在编程中,我们连接单词、字符串,如下所示:

string maValeur = "我的值 1";
maValeur = maValeur + ", 我的值 2";
maValeur = maValeur + ", 我的值 3";

//这将产生:
//我的值 1,我的值 2,我的值 3

所以当我们只有一个很小的连接时,这很好,但当我们做一个循环时,如下所示:

string maValeur = null;
//一个100,000次连接的循环
for(int i=0; i < 100000; i++)
{
    maValeur = maValeur + ",我的值 " + i;
}

20秒和768毫秒!(00:20.768) 应该避免! 性能完全不理想!

为什么?

使用这种字符串连接时,每次都为每个添加的字符串分配内存空间,而且如果您想修改或操作这个变量,性能真的很差!微软知道这一点,因此发明了StringBuilder!字符串和构建器用于构建字符串。

StringBuilder

StringBuilder对象使用起来非常简单:

StringBuilder maValeur = new StringBuilder();
//一个100,000次连接的循环
for(int i=0; i < 1000000; i++)
{
    maValeur.Append("我的值 ").Append(i).Append(",");
}

而且啪!6毫秒!(00:00.006)

正如您所注意到的,StringBuilder对象做同样的事情,但速度快1000倍,并且不会占用太多内存!只需使用Append方法即可。

此外,StringBuilder允许您根据需要操作字符串:

方法 描述
StringBuilder.Append 将一个字符串元素连接到StringBuilder中已有值的末尾
StringBuilder.AppendFormat 将一个字符串元素连接到StringBuilder中已有值的末尾,并可以使用索引 {x} 进行格式化
StringBuilder.Insert(start, "值") 在StringBuilder中已有值的特定位置添加一个字符串元素
StringBuilder.Remove(start, 长度) 从StringBuilder中已有值的特定位置开始,移除一定长度的字符。

AppendFormat

您可以像使用string.Format()一样使用StringBuilder,如下所示:

StringBuilder maValeur = new StringBuilder();
int maLigne = 1000;
for(int i=0; i < 1000; i++)
{
    maValeur.AppendFormat("我的值 {0} 是第 {1} 行的值,", i, maLigne);
    maLigne++;
}

您传递给索引0 -> i 和索引1 -> maLigne

插入

要精确地在StringBuilder中插入另一个字符串,简单得很:

StringBuilder maValeur = new StringBuilder();
maValeur.Append("我的狗在花园里散步。");
maValeur.Insert(10,"和我的猫 ");
maValeur.Insert(33,"nt");

//结果:我的狗和我的猫在花园里散步。

移除

要移除字符,同样简单:

StringBuilder maValeur = new StringBuilder();
maValeur.Append("我的狗在花园里散步。");
maValeur.Insert(10,"和我的猫 ");
maValeur.Insert(33,"nt");
maValeur.Remove(35, 15);

//结果:我的狗和我的猫散步。

养成使用StringBuilder而不是字符串连接的习惯,您会在性能上获益,相信我!

此外,这也得到了查克·诺里斯的认可:

 

Aucun commentaire pour le moment.

Une erreur s'est produite. Cette application peut ne plus répondre jusqu'à ce qu'elle soit rechargée.Veuillez contacter l'auteur. Reload 🗙