如何检查一个 StringBuilder 是否为空?

83

我想测试 StringBuilder 是否为空,但是没有 IsEmpty 方法或属性。

如何确定它是否为空?


15
这句话的意思是判断“sb”这个变量中存储的字符串长度是否为零。如果是零,返回true;否则返回false。 - Lasse V. Karlsen
@LasseV.Karlsen 哦,太简单了 :/ 抱歉,我是C#的初学者。 - Boiethios
3
智能感知显示“获取或设置 StringBuilder 对象的长度”,加上构造函数使用容量作为参数,以及不能设置现有字符串的长度,这些因素结合起来导致人们认为 Length 反映了容量。而事实上它就是答案,这一点非常令人费解。 - bielawski
4个回答

110

如果您查看StringBuilder的文档,它只有4个属性之一是Length

StringBuilder对象的长度由其Char对象的数量定义。

您可以使用Length属性:

获取或设置当前StringBuilder对象的长度。

StringBuilder sb = new StringBuilder();

if (sb.Length != 0)
{
    // you have found some difference
}

另一种可能性是使用String.IsNullOrEmpty方法将其视为字符串,并使用ToString方法将构建器压缩为字符串。您甚至可以获取结果字符串并将其分配给一个变量,如果发现了一些差异,您就可以使用该变量:

string difference = ""; 

if (!String.IsNullOrEmpty(difference = sb.ToString()))
{
    Console.WriteLine(difference);      
}

4
public bool Empty { get; } = this.Length == 0; 加进去很容易。奇怪他们没有想到这个。 - Boiethios
@Boiethios 这是真的,我一直想知道为什么他们没有实现类似这样的东西。 - Mong Zhu
这同样适用于可枚举对象:https://dev59.com/w2Mk5IYBdhLWcg3w5R6k - Boiethios
我认为这是因为长度属性是可写的。因此,当调用toString方法时,您可以限制stringbuilder解析为字符串的字符数。所以我甚至不知道何时信任kength属性。这里发布的代码非常好,因为它依赖于stringbuilder的实际输出。 - Ricker Silva
1
@RickerSilva 这是一个很好的观点。实际上情况更糟。如果您设置了 Length 属性,那么 StringBuilder 将使用 0x00 字符填充它,直到该点。如果您随后添加字符串,则它们将附加到零十六进制字符串中。如果设置了 Length 属性,则不幸的是 string.IsNullOrWhiteSpace(sb.ToString())string.IsNullOrEmpty(sb.ToString()) 方法也停止工作。 - Mong Zhu

9

使用 StringBuilder.Length 属性,这里是文档

if (mySB.Length > 0)
{
     Console.WriteLine("Bang! is not empty!"); 
}

-1

只需使用Length。以下是如何使用它:

      // create a StringBuilder object
    // with a String pass as parameter
    StringBuilder
        str
        = new StringBuilder("Hello World");

    // print string
    System.out.println("String = "
                       + str.toString());

    // get length of StringBuilder object and initialize if you use it more than ones
    int length = str.length();


   // you can check like
   if(len != 0)
    // print length
    System.out.println("length of String = "
                       + length);

这个答案并没有什么用处,它只是 Mong Zhu 答案的简短版本。 - RebootDeluxe

-3

使用这个,它会起作用:

StringBuilder stringbuilder = new StringBuilder();
if(string.isnullorempty(Convert.toString(stringbuilder)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接