目录
2.StringBuilder.Chars[Int32] 属性
4.StringBuilder.MaxCapacity 属性
?????????请详见本文作者的其他文章,C#用StringBuilder高效处理字符串-CSDN博客 ?https://wenchm.blog.csdn.net/article/details/135397349
????????共有4种属性:Capacity、Chars[Int32]、Length和MaxCapacity。
?????????获取或设置可包含在当前实例所分配的内存中的最大字符数。
public int Capacity { get; set; }
属性值
Int32
可包含在当前实例所分配的内存中的最大字符数。 其值可以从 Length 到 MaxCapacity。
例外
ArgumentOutOfRangeException
为集运算指定的值小于此实例的当前长度。
或 -
为集运算指定的值大于最大容量。
????????Capacity 不影响当前实例的字符串值。 Capacity 可以减小,只要它不小于 Length 。
????????StringBuilder需要时动态分配更多的空间并相应增加Capacity。 出于性能原因, StringBuilder 可能会分配比所需内存更多的内存。 分配的内存量是特定于实现的。
????????实例见StringBuilder.Length 属性的实例。
????????获取或设置此实例中指定字符位置处的字符。
public char this[int index] { get; set; }
参数
index
Int32
字符的位置。
属性值
Char
index 位置处的 Unicode 字符。
例外
ArgumentOutOfRangeException
设置字符时,index 在此实例的范围之外。
IndexOutOfRangeException
获取字符时,index 在此实例的范围之外。
????????参数 index 是 字符在 中 StringBuilder的位置。 字符串中的第一个字符位于索引 0。 字符串的长度是它包含的字符数。 实例的最后一个 StringBuilder 可访问字符位于索引 Length - 1。
????????Chars[] 是 类的默认属性 StringBuilder 。 在 C# 中,它是一个索引器。
// Chars[] 是 类的默认属性 StringBuilder 。 在 C# 中,它是一个索引器。
// 这意味着可以从 属性中 Chars[] 检索单个字符,
// 如以下示例所示,该属性对字符串中的字母、空格和标点符号字符数进行计数。
using System.Text;
namespace ConsoleApp7
{
public class Example
{
public static void Main()
{
int nAlphabeticChars = 0;
int nWhitespace = 0;
int nPunctuation = 0;
StringBuilder strbuild = new("This is a simple sentence.");
for (int i = 0; i < strbuild.Length; i++)
{
char ch = strbuild[i];
if (char.IsLetter(ch)) { nAlphabeticChars++; continue; }
if (char.IsWhiteSpace(ch)) { nWhitespace++; continue; }
if (char.IsPunctuation(ch)) nPunctuation++;
}
Console.WriteLine("The sentence '{0}' has:", strbuild);
Console.WriteLine(" Alphabetic characters: {0}", nAlphabeticChars);
Console.WriteLine(" White-space characters: {0}", nWhitespace);
Console.WriteLine(" Punctuation characters: {0}", nPunctuation);
}
}
}
// The example displays the following output:
// The sentence 'This is a simple sentence.' has:
// Alphabetic characters: 21
// White-space characters: 4
// Punctuation characters: 1
?????????获取或设置当前 StringBuilder 对象的长度。
public int Length { get; set; }
属性值
Int32
此实例的长度。
例外
ArgumentOutOfRangeException
为集运算指定的值小于零或大于 MaxCapacity。
????????对象的长度 StringBuilder 由其对象数 Char 定义。
????????与属性 String.Length 样, Length 属性指示当前字符串对象的长度。 String.Length与只读属性不同, Length 属性允许您修改存储在 StringBuilder 对象的字符串的长度。
????????如果指定的长度小于当前长度,则当前 StringBuilder 对象将被截断为指定的长度。 如果指定的长度大于当前长度,则当前 StringBuilder 对象的字符串值的末尾将填充 Unicode NULL 字符 (U+0000) 。
????????如果指定的长度大于当前容量, Capacity 则增大以使其大于或等于指定的长度。
//StringBuilder.Length 属性
using System.Text;
namespace ConsoleApp6
{
class Sample
{
public static void Main()
{
StringBuilder sb1 = new("abc");
StringBuilder sb2 = new("abc", 16);
Console.WriteLine();
Console.WriteLine("a1) sb1.Length = {0}, sb1.Capacity = {1}", sb1.Length, sb1.Capacity);
Console.WriteLine("a2) sb2.Length = {0}, sb2.Capacity = {1}", sb2.Length, sb2.Capacity);
Console.WriteLine("a3) sb1.ToString() = \"{0}\", sb2.ToString() = \"{1}\"",sb1.ToString(), sb2.ToString());
Console.WriteLine("a4) sb1 equals sb2: {0}", sb1.Equals(sb2));
Console.WriteLine();
Console.WriteLine("Ensure sb1 has a capacity of at least 50 characters.");
sb1.EnsureCapacity(50);
Console.WriteLine();
Console.WriteLine("b1) sb1.Length = {0}, sb1.Capacity = {1}", sb1.Length, sb1.Capacity);
Console.WriteLine("b2) sb2.Length = {0}, sb2.Capacity = {1}", sb2.Length, sb2.Capacity);
Console.WriteLine("b3) sb1.ToString() = \"{0}\", sb2.ToString() = \"{1}\"",sb1.ToString(), sb2.ToString());
Console.WriteLine("b4) sb1 equals sb2: {0}", sb1.Equals(sb2));
Console.WriteLine();
Console.WriteLine("Set the length of sb1 to zero.");
Console.WriteLine("Set the capacity of sb2 to 51 characters.");
sb1.Length = 0;
sb2.Capacity = 51;
Console.WriteLine();
Console.WriteLine("c1) sb1.Length = {0}, sb1.Capacity = {1}", sb1.Length, sb1.Capacity);
Console.WriteLine("c2) sb2.Length = {0}, sb2.Capacity = {1}", sb2.Length, sb2.Capacity);
Console.WriteLine("c3) sb1.ToString() = \"{0}\", sb2.ToString() = \"{1}\"",sb1.ToString(), sb2.ToString());
Console.WriteLine("c4) sb1 equals sb2: {0}", sb1.Equals(sb2));
}
}
}
/*
运行结果:
a1) sb1.Length = 3, sb1.Capacity = 16
a2) sb2.Length = 3, sb2.Capacity = 16
a3) sb1.ToString() = "abc", sb2.ToString() = "abc"
a4) sb1 equals sb2: True
Ensure sb1 has a capacity of at least 50 characters.
b1) sb1.Length = 3, sb1.Capacity = 50
b2) sb2.Length = 3, sb2.Capacity = 16
b3) sb1.ToString() = "abc", sb2.ToString() = "abc"
b4) sb1 equals sb2: False
Set the length of sb1 to zero.
Set the capacity of sb2 to 51 characters.
c1) sb1.Length = 0, sb1.Capacity = 50
c2) sb2.Length = 3, sb2.Capacity = 51
c3) sb1.ToString() = "", sb2.ToString() = "abc"
c4) sb1 equals sb2: False
*/
????????获取此实例的最大容量。
public int MaxCapacity { get; }
属性值
Int32
此实例可容纳的最大字符数。
????????此实现的最大容量为 Int32.MaxValue。 但是,此值特定于实现,在其他或更高版本的实现中可能有所不同。 可以通过调用 StringBuilder(Int32, Int32) 构造函数显式设置对象的最大容量StringBuilder。