Home

Search

VB.NET StringBuilder Examples

Improve performance when appending Strings with the StringBuilder class. Replace and insert data.

StringBuilder. A class, StringBuilder optimizes and improves common String operations. Appending, replacing and inserting are faster. It is easy to use.

Type notes. 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.Strings

First 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.For Each, For
Imports: The first directive "Imports System.Text" lets us reference StringBuilder more directly in the program.
VB.NET program that uses StringBuilder 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 Module Output 0 1 2

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.
VB.NET program that uses Replace Imports System.Text Module Module1 Sub Main() Dim builder As New StringBuilder("Initialize the StringBuilder.") builder.Replace("the", "my") Console.WriteLine(builder.ToString) Console.ReadLine() End Sub End Module Output Initialize 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.
VB.NET program that uses Replace, multiple instances 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 Module Output RESULT: 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.
Loop: 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.
Console
VB.NET program that uses loop with StringBuilder 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. Dim item As String For Each item In items builder.Append(item).AppendLine() Next ' Write result. Console.WriteLine(builder.ToString) Console.ReadLine() End Sub End Module Output These 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.
VB.NET program that uses Insert 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 Module Output A 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.
VB.NET program that uses Remove 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 Module Output A big dog A dog

AppendFormat. Let us use the AppendFormat Function. AppendFormat receives a format string, usually with substitutions such as {0}, and parameters to fill those substitutions.
First: The Main entry point declares a StringBuilder. And then each Integer is looped over with For-Each.
Finally: Each integer is appended. Each integer is formatted to have one decimal place.
Integer
Tip: Using format strings, as with AppendFormat, often yields code that is easier to read and understand.
VB.NET program that uses AppendFormat Imports System.Text Module Module1 ''' <summary> ''' Integer array for example ''' </summary> Private m_values As Integer() = {5, 10, 15, 20} Sub Main() ' StringBuilder declaration. Dim b As New StringBuilder ' Declare new loop variable. Dim v As Integer For Each v In m_values ' Display with AppendFormat. b.AppendFormat(("Value: {0:0.0}" & Environment.NewLine), v) Next Console.WriteLine(b.ToString) End Sub End Module Output Value: 5.0 Value: 10.0 Value: 15.0 Value: 20.0

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.
VB.NET program that times StringBuilder, string appends 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 Output 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.
StringBuilder Performance

HtmlTextWriter. HTML syntax uses lots of quotes and brackets. We can write HTML markup directly, without dealing with syntax: check out HtmlTextWriter.HtmlTextWriter
Note: Types such as HtmlTextWriter tend to reduce performance but improve code readability.

A summary. As developers, we will require StringBuilder in many applications. It is an excellent performance optimization. It can make unusable programs fast.

Often, we use StringBuilder in For-Each loops. For repeated appends, StringBuilder is ideal. Concatenating many strings is a sign that StringBuilder is needed.

Home
© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to info@dotnetperls.com.