先决条件:C#中的字符串
StringBuilder的用于表示字符的可变的字符串。可变是指可以更改的字符串。所以String对象是不可变的,但StringBuilder是可变的字符串类型。它不会创建当前字符串对象的新修改实例,但会在现有字符串对象中进行修改。 StringBuilder的完整功能由System.Text
命名空间中存在的StringBuilder类提供。
需要StringBuilder:如上所述,String类对象是不可变的,这意味着如果用户修改任何字符串对象,将导致创建新的字符串对象。它使字符串的使用成本很高。因此,当用户需要对字符串进行重复操作时,就会出现对StringBuilder的需求。它提供了处理重复和多个字符串操作的优化方法。
例子:
// C# program to demonstrate the
// difference between String,
// StringBuilder
using System;
using System.Text;
using System.Collections;
class GFG {
// Concatenates to String
public static void concat1(String s1)
{
// taking a string which
// is to be Concatenate
String st = "forGeeks";
// using String.Concat method
// you can also replace it with
// s1 = s1 + "forgeeks";
s1 = String.Concat(s1, st);
}
// Concatenates to StringBuilder
public static void concat2(StringBuilder s2)
{
// using Append method
// of StringBuilder class
s2.Append("forGeeks");
}
// Main Method
public static void Main(String[] args)
{
String s1 = "Geeks";
concat1(s1); // s1 is not changed
Console.WriteLine("Using String Class: " + s1);
StringBuilder s2 = new StringBuilder("Geeks");
concat2(s2); // s2 is changed
Console.WriteLine("Using StringBuilder Class: " + s2);
}
}
输出:
Using String Class: Geeks
Using StringBuilder Class: GeeksforGeeks
解释:
- concat1方法的使用:在此方法中,我们传递字符串“ Geeks ”并执行“ s1 = String.Concat(s1,st);”。 st是“ forGeeks ”的并置。从Main()传递的字符串未更改,这是由于String是不可变的。更改字符串的值会创建另一个对象,concat1()中的s1将存储对新字符串的引用。但是Main()和concat1()中的引用s1引用了不同的字符串。
- concat2方法的使用:在此方法中,我们传递了一个字符串“ Geeks”并执行了“ s2.Append(“ forGeeks”)”,该操作将字符串(在Main中)的实际值更改为“ GeeksforGeeks”。这是由于一个简单的事实,即StringBuilder是可变的,因此会更改其值。
何时使用哪一个:
- 如果字符串在整个程序中保持不变,请使用String类对象,因为String对象是不可变的。
- 如果字符串可以更改(例如:字符串构造中的大量逻辑和操作),则使用StringBuilder是最佳选择。
将String转换为StringBuilder:
要将String类对象转换为StringBuilder类对象,只需将字符串对象传递给StringBuilder类构造函数即可。
例子:
// C# program to demonstrate the
// conversion from String to StringBuilder.
using System;
using System.Text;
class GFG {
// Main Method
public static void Main(String[] args)
{
String str = "Geeks";
// conversion from String object
// to StringBuilder
StringBuilder sbl = new StringBuilder(str);
sbl.Append("ForGeeks");
Console.WriteLine(sbl);
}
}
输出:
GeeksForGeeks
将StringBuilder转换为String:
可以使用ToString()方法执行此转换。
例子:
// C# program to demonstrate the
// conversion from String to StringBuilder
using System;
using System.Text;
class GFG {
// Main Method
public static void Main(String[] args)
{
StringBuilder sbdr = new StringBuilder("Builder");
// conversion from StringBuilder
// object to String using ToString method
String str1 = sbdr.ToString();
Console.Write("StringBuilder object to String: ");
Console.WriteLine(str1);
}
}
输出:
StringBuilder object to String: Builder