我想创建一个长度为256的字符串构建器,字符串“128”应该放在开头。
然而,我的代码
Dim sb As New StringBuilder
sb.Append(New String("128", 256))
Dim s As String = sb.ToString
告诉我所有256个字符都填充“1”:
s = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
有人可以告诉我我做错了什么吗? 谢谢!
答案 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)"