VB.NET stringbuilder,长度为256

时间:2014-03-19 17:07:18

标签: vb.net stringbuilder

我想创建一个长度为256的字符串构建器,字符串“128”应该放在开头。

然而,我的代码

    Dim sb As New StringBuilder
    sb.Append(New String("128", 256))

    Dim s As String = sb.ToString

告诉我所有256个字符都填充“1”:

s = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"

有人可以告诉我我做错了什么吗? 谢谢!

2 个答案:

答案 0 :(得分:4)

如果我正确地读你的问题,这应该做你想要的:

Dim sb As New StringBuilder(256)
sb.Append("128")

或者你想要空间吗?

Dim sb As New StringBuilder("128".PadRight(256))

StringBuilder构造函数中的256是性能优化。由于您知道结果字符串的长度,因此请预先为其预留所有空间。你也可能会为这个字符串做更多的工作,这样就可以在那里使用不同的(更大的)数字或没有数字。


基于评论:

    Dim sb As New StringBuilder("128".PadRight(256, NullChar()))

但这是一个非常糟糕的主意。不要在.Net中使用空字符。

答案 1 :(得分:2)

你做错了假设 New String("128", 256)做了什么。如果你查看最近的可用构造函数:String Constructor (Char, Int32),你会看到它需要一个Char。这意味着它最终会重复第一个字符1,256次。

您似乎想要这样做的方式可以使用

来实现
Dim sb As New StringBuilder("128")
sb.Length = 256

因为根据StringBuilder.Length Property上的文档:"如果指定的长度大于当前长度,则使用Unicode NULL字符填充当前StringBuilder对象的字符串值的结尾( U + 0000)"