StringBuilder. The StringBuilder class in VB.NET optimizes and improves common String operations. Appending, replacing and inserting are faster.
With ToString, we can convert our data back into a String. This operation is optimized to avoid copies. With StringBuilder we have many built-in optimizations.
Append example. We see a program that declares a new StringBuilder. Then it uses a simple For-loop and appends integers and 1-character strings to it.
Imports System.Text
Module Module1
Sub Main()
' Create StringBuilder and append to it in a loop.
Dim builder As New StringBuilder()
For i As Integer = 0 To 2
builder.Append(i).Append(" ")
Next
Console.WriteLine(builder)
End Sub
End Module0 1 2
AppendFormat. Next we use AppendFormat. This function receives a format string, usually with substitutions such as {0}, and parameters to fill those substitutions.
Detail Using format strings, as with AppendFormat, often yields code that is easier to read and understand.
Imports System.Text
Module Module1
Sub Main()
' StringBuilder declaration.
Dim builder As New StringBuilder
Dim number As Integer = 1
builder.AppendFormat("R: {0} ({1}).", "ABC", number)
' Print the resulting string data.
Console.WriteLine(builder)
End Sub
End ModuleR: ABC (1).
Replace. This example creates a StringBuilder with the constructor. Then it calls Replace() to replace one substring with another. Performance is good. No string temporaries are created.
Here The starting buffer for the StringBuilder has the word "the" in it. After the Replace method is run, it instead has the word "my."
Return Replace() returns a reference to the StringBuilder. We can ignore this return value, or call another method on it.
Imports System.Text
Module Module1
Sub Main()
Dim builder As New StringBuilder("Initialize the StringBuilder.")
builder.Replace("the", "my")
Console.WriteLine(builder.ToString)
End Sub
End ModuleInitialize my StringBuilder.
Replace, all instances. The Replace() Function does not just replace the first instance of a string it finds. It changes all of them, no matter how many there are.
Imports System.Text
Module Module1
Sub Main()
Dim builder As New StringBuilder("I see a cat, and the cat sees me.")
' Replace all instances of substring.
builder.Replace("cat", "dog")
Console.WriteLine("RESULT: {0}", builder)
End Sub
End ModuleRESULT: I see a dog, and the dog sees me.
For-each. Here we use StringBuilder in a For-Each loop. Whenever we see Strings being appended in a loop, consider StringBuilder. It can improve runtime performance.
Here A String array is declared. It contains 3 strings. A new StringBuilder is instantiated with a certain value.
Detail In the For-Each loop, the Dim String is assigned to each String in the String array.
Finally The StringBuilder has each string (and a newline) appended to it. After the loop, the results are printed to the Console.
Imports System.Text
Module Module1
Sub Main()
' String array for use in loop.
Dim items As String() = New String() {"Indus", "Danube", "Nile"}
' Initialize new StringBuilder.
Dim builder As StringBuilder =
New StringBuilder("These rivers are cool:").AppendLine
' Loop over each item in Array.
For Each item As String In items
builder.Append(item).AppendLine()
Next
' Write result.
Console.WriteLine(builder.ToString)
End Sub
End ModuleThese rivers are cool:
Indus
Danube
Nile
Insert. This modifies a StringBuilder at the specified index. Here I specify the index 1, so the String literal is inserted after the first character in the buffer.
Imports System.Text
Module Module1
Sub Main()
Dim builder As StringBuilder = New StringBuilder("A cat")
Console.WriteLine(builder)
' Insert this string at index 1.
builder.Insert(1, " fluffy")
Console.WriteLine(builder)
End Sub
End ModuleA cat
A fluffy cat
Remove. This erases characters from a StringBuilder and collapse those following it. In this example, I remove four chars starting at index 1.
Result The final data is missing those four chars, but contains the surrounding ones.
Imports System.Text
Module Module1
Sub Main()
Dim builder As StringBuilder = New StringBuilder("A big dog")
Console.WriteLine(builder)
' Remove character starting at index 1.' ... Remove 4 characters.
builder.Remove(1, 4)
Console.WriteLine(builder)
End Sub
End ModuleA big dog
A dog
Benchmark. In appending, StringBuilder is faster than String. Consider this benchmark: we want to append 3-character string (abc). We compare StringBuilder and String.
Version 1 This version of the code uses StringBuilder to append a string 100 times.
Version 2 Here we use String and its concatenation operator to append a string 100 times. This creates 100 strings.
Result When 2 strings are concatenated, a new String object results. Reducing allocations (with StringBuilder) improves performance.
Imports System.Text
Module Module1
Sub Main()
Dim m As Integer = 100000
' Version 1: use StringBuilder.
Dim s1 As Stopwatch = Stopwatch.StartNew
For i As Integer = 0 To m - 1
Dim builder As StringBuilder = New StringBuilder
For x As Integer = 0 To 99
builder.Append("abc")
Next
Next
s1.Stop()
' Version 2: use String.
Dim s2 As Stopwatch = Stopwatch.StartNew
For i As Integer = 0 To m - 1
Dim str As String = ""
For x As Integer = 0 To 99
str += "abc"
Next
Next
s2.Stop()
Dim u As Integer = 1000000
Console.WriteLine( s1.Elapsed.TotalMilliseconds.ToString("0.00 ms"))
Console.WriteLine( s2.Elapsed.TotalMilliseconds.ToString("0.00 ms"))
End Sub
End Module 156.04 ms, StringBuilder Append
1020.00 ms, String concat
Performance advice. My research shows that appending two or three strings in a loop is faster than using StringBuilder. But using StringBuilder is faster for more than four iterations.
However It is best to almost always use StringBuilder in loops. It can avert a performance disaster in edge cases.
HtmlTextWriter. HTML syntax uses lots of quotes and brackets. We can write HTML markup directly, without dealing with syntax: check out HtmlTextWriter.
A summary. As developers, we will require StringBuilder in many applications. It is an excellent performance optimization. Often, we use StringBuilder in For-Each loops.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Jan 14, 2024 (edit link).