TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

VB.NET StringBuilder Examples

These VB.NET examples use the StringBuilder type. StringBuilder improves performance with string appends.

StringBuilder is an optimization.

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

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.

First, we see an example program that declares a new StringBuilder. We append Strings and newlines to it. Finally the StringBuilder is converted to a String and written to the Console.

Imports: Please take note of the first directive, which imports the System.Text namespace.

ToString: With this method, we convert the internal data of a StringBuilder into an actual String object.

Based on:

.NET 4.5

VB.NET program that uses StringBuilder

Imports System.Text

Module Module1
    Sub Main()
	' Declare new StringBuilder Dim.
	Dim builder As New StringBuilder

	' Append a string to the StringBuilder.
	builder.Append("Here is the list:")

	' Append a line break.
	builder.AppendLine()

	' Append a string and then another line break.
	builder.Append("1 dog").AppendLine()

	' Get internal String value from StringBuilder.
	Dim s As String = builder.ToString

	' Write output.
	Console.WriteLine(s)
	Console.ReadLine()
    End Sub
End Module

Output

Here is the list:
1 dog

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. This is not necessary to assign, as it is equal to the first reference.

However: The reference is useful when calling StringBuilder methods on themselves, as in "fluent" interfaces.

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.

For-each. Here we use StringBuilder in a For-Each loop. Whenever you see Strings being appended in a loop, consider StringBuilder. It can improve runtime performance.

Here: A String array is declared. It contains three 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.

For Each

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

Performance. In appending, StringBuilder is faster than String. Consider this benchmark. I append a 3-character string (abc) 100 times. With StringBuilder, the loop is 9 times faster.

Tip: No string allocations occur when Append is called. But when two strings are concatenated, a new String object results.

And: Reducing allocations, and objects, improves performance in the .NET Framework.

VB.NET that times StringBuilder, string appends

Imports System.Text

Module Module1

    Sub Main()

	Dim m As Integer = 100000

	' 1: Append 100 strings together with 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()

	' 2: Append 100 strings together with 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

Results

 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.

Performance

Methods. These are my notes on methods you can use with StringBuilder. The documentation here is universal for all .NET languages. As developers, we should reference MSDN for all new types.

Append: MSDN states that this "appends the string representation of a specified object to the end of this instance."

StringBuilder: MSDN

EnsureCapacity: This rarely is useful for changing the capacity, which is an optimization you can use.

Insert: This is similar to Replace. But we use it to add characters at a specific index.

Remove: This functions the same as the Remove method on String, but it avoids character buffer copies.

Replace: This replaces one substring in your StringBuilder with another. An example is shown on this page.

Immutable. This term means that the data pointed at cannot be changed from our code. String is immutable. You cannot assign chars to its contents. But StringBuilder uses mutable buffers.

This is key: In programs, we can improve performance by reducing allocations and objects.

So: With StringBuilder, we reuse one buffer to build up a collection of characters. With String, many objects are instead created.

Caution: We can add lots of data to StringBuilder. But we will get an ArgumentOutOfRange exception if we put more data than will fit.

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.

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.


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf