In this part of the Visual Basic tutorial, we will work with string data in more detail.
Strings are the most important data types in computer languages. That is why we dedicate a whole chapter to working with strings in Visual Basic.
There is a
There is a
The
The format item has the following syntax:
The length component is optional. It is the minimum number of characters in the string representation of the parameter. If positive, the parameter is right-aligned; if negative, it is left-aligned. If it is specified, there must by a colon separating the index and the length.
The formatString is optional. It is a string that formats a value is a specific way. It can be used to format dates, times, numbers or enumerations.
Here we show, how to work with length component of the format items. We print three columns of numbers to the terminal. Left, middle and right aligned.
The last two examples will format numeric and date data.
Finally, we will format date and time data.
This part of the Visual Basic tutorial covered strings.
Strings are the most important data types in computer languages. That is why we dedicate a whole chapter to working with strings in Visual Basic.
First example
A string literal is the notation for representing a string value within the text of a computer program. In Visual Basic string literals are enclosed by double quotes. A string in Visual Basic is a sequence of Unicode characters.Option Strict OnIn the preceding example, we create two string variables. Then we add them and compute the length of the first string.
Module Example
Sub Main()
Dim str1 As String = "There are 10"
Dim str2 As String = " apples"
Console.WriteLine(str1 + str2)
Console.WriteLine("The length of the first string is " _
+ str1.Length.ToString() + " characters")
End Sub
End Module
Dim str1 As String = "There are 10"A string variable is declared and initiated.
Console.WriteLine(str1 + str2)Two strings are concatenated. We use the + operator to add two strings.
Console.WriteLine("The length of the first string is " _The
+ str1.Length.ToString() + " characters")
Length
property is used to determine the length of the string. $ ./basics.exeRunning the example gives this result.
There are 10 apples
The length of the first string is 12 characters
Using quotes
Double quotes are used to create a string literal in Visual Basic. What if we wanted to display quotes, for example in a direct speech? To print a double quote, it must be preceded by another double quote.Option Strict OnWhen printing double quotes to the console, they must be preceded by another double quote.
Module Example
Sub Main()
Console.WriteLine("There are many stars.")
Console.WriteLine("He said, ""Which one is your favourite?""")
End Sub
End Module
Console.WriteLine("He said, ""Which one is your favourite?""")Here we show, how to print a direct speech to the console. If we did not use two double quotes, the compiler would be misled. It would see two consecutive strings.
$ ./quotes.exeOutput.
There are many stars.
He said, "Which one is your favourite?"
Multiline strings
It is possible to create a multiline string in Visual Basic.Option Strict OnThe example creates a string that spans several lines. We use a line continuation character, a plus operator and a
Module Example
Sub Main()
Dim multiString As String = "I cheated myself" + vbNewLine + _
"like I knew I would" + vbNewLine + _
"I told ya, I was trouble" + vbNewLine + _
"you know that I'm no good"
Console.WriteLine(multiString)
End Sub
End Module
vbNewLine
display constant. $ ./multiline.exeThis text is displayed in four lines. All the text was assigned to one string variable.
I cheated myself
like I knew I would
I told ya, I was trouble
you know that I'm no good
Comparing strings
Option Strict OnComparison operators work differently in a string context.
Module Example
Sub Main()
Console.WriteLine("12" = "12") 'Returns True
Console.WriteLine("17" < "9") ' Returns True
Console.WriteLine("aa" > "ab") ' Returns False
End Sub
End Module
Console.WriteLine("17" < "9") 'Returns True17 is not smaller than 9. But when applying < on two strings, we do not compare numbers. We compare the sorting order of the characters. 1 is before 9 and is therefore has a 'lower position' and the comparison returns True.
Console.WriteLine("aa" > "ab") ' Returns FalseIf the first two characters are equal, the operation continues on the following ones. The a character is before the b, and the comparison operation returns False.
There is a
String.Compare()
method, which compares two specified strings and returns an integer that indicates their relative position in the sort order. If the returned value is less than zero, the first string is less than the second. If it returns zero, both strings are equal. Finally, if the returned value is greater than zero, the first string is greater than the second. Option Strict OnThere is an optional third ignoreCase argument, that determines, if the case should be honored or not.
Module Example
Sub Main()
Dim str1 As String = "Visual Basic"
Dim str2 As String = "visual basic"
Console.WriteLine(String.Compare(str1, str2, True))
Console.WriteLine(String.Compare(str1, str2, False))
End Sub
End Module
Console.WriteLine(String.Compare(str1, str2, True))Compare two strings and ignore the case. This line prints 0 to the console.
There is a
Like
operator, which can be used for simple regular expression matching. Option Strict OnWe have an array of words. We will test these words against the regex pattern. We will print a message to the console, if the words matches or not.
Module Example
Dim words() As String = {"Seven", "even", "Maven", "Amen", "Leven"}
Sub Main()
For Each word As String In words
If word Like "?*even" Then
Console.WriteLine("{0} matches the pattern", word)
Else
Console.WriteLine("{0} does not match the pattern", word)
End If
Next
End Sub
End Module
Dim words() As String = {"Seven", "even", "Maven", "Amen", "Leven"}This is an array of five words.
For Each word As String In wordsWe use the
...
Next
For Each
loop to traverse the array. The current word is stored in the word variable. If word Like ".*even" ThenThe "?*even" is a simple regular expression pattern. The ? matches any single character, the * zero or more characters. We print a message to inform if the word matches the pattern or not.
Console.WriteLine("{0} matches the pattern", word)
Else
Console.WriteLine("{0} does not match the pattern", word)
End If
String functions
Visual Basic has useful built-in functions that can be used for working with strings.Option Strict OnWe introduce four string functions in Visual Basic.
Module Example
Sub Main()
Dim str As String = "Visual Basic"
Dim n As Integer = Len(str)
Dim l As String = Left(str, 6)
Dim r As String = Right(str, 5)
Dim repl As String = Replace(str, "Basic", "form")
Console.WriteLine("The string has {0} characters", n)
Console.WriteLine("The Left function returns {0}", l)
Console.WriteLine("The Right function returs {0}", r)
Console.WriteLine("The Replace function returns {0}", repl)
End Sub
End Module
Dim n As Integer = Len(str)The
Len()
function returns the number of characters in a string. Dim l As String = Left(str, 6)This call of the
Left()
function returns 6 characters from the left of the string. In our case, "Visual". Dim r As String = Right(str, 5)Here we get 5 characters from the right.
Dim repl As String = Replace(str, "Basic", "form")Strings are immutable in Visual Basic. When we use the
Replace()
function, we return a new modified string, in which the first string is replaced with the second one. $ ./strfunc.exeRunning the example gives the preceding result.
The string has 12 characters
The Left function returns Visual
The Right function returs Basic
The Replace function returns Visual form
The
Join()
and Split()
functions are very handy functions. Option Strict OnIn our program, we will join and split strings with these two functions.
Imports System
Module Example
Sub Main()
Dim items() As String = {"C#", "Visual Basic", "Java", "Perl"}
Dim langs As String = Join(items, ",")
Console.WriteLine(langs)
Dim ls() As String = Split(langs, ",")
For Each lang As String In ls
Console.WriteLine(lang)
Next
End Sub
End Module
Dim langs As String = Join(items, ",")All words from the array are joined. We build one string from them. There will be a comma character between each two words.
Dim ls() As String = Split(langs, ",")As a reverse operation, we split the langs string. The
Split()
function returns an array of words, delimited by a character. In our case it is a comma character. For Each lang As String In lsWe go through the array and print its elements.
Console.WriteLine(lang)
Next
$ ./joinsplit.exeOutput of the example.
C#,Visual Basic,Java,Perl
C#
Visual Basic
Java
Perl
String methods
Apart from string functions, there are several string methods. Some of them provide the same functionality. As we have already mentioned, strings are not primitive data types. They are reference types. They are objects and these objects have methods, which can do some work.Option Strict OnWe introduce five string methods in the above example.
Imports System
Module Example
Sub Main()
Dim str As String = "Determination"
Console.WriteLine(str.Contains("e"))
Console.WriteLine(str.IndexOf("e"))
Console.WriteLine(str.LastIndexOf("i"))
Console.WriteLine(str.ToUpper)
Console.WriteLine(str.ToLower)
End Sub
End Module
Console.WriteLine(str.Contains("e"))The
Contains()
method returns True if the string contains a specific character. Console.WriteLine(str.IndexOf("e"))The
IndexOf
returns the first index of a letter in the string. Console.WriteLine(str.LastIndexOf("i"))The
LastIndexOf()
methods returns the last index of a letter in a string. Console.WriteLine(str.ToUpper)Letters of the string are converted to uppercase with the
Console.WriteLine(str.ToLower)
ToUpper
method and to lowercase with the ToLower
method. $ ./strmethods.exeRunning the program.
True
1
10
DETERMINATION
determination
Copy vs Clone
We will describe a difference between two methods. Copy and Clone. TheCopy()
method creates a new instance of String with the same value as a specified String. The Clone()
method returns a reference to the string, which is being cloned. It is not an independent copy of the string on the Heap. It is another reference on the same string. Option Strict OnOur example demonstrates the difference between the two methods.
Module Example
Sub Main()
Dim str As String = "Visual Basic"
Dim cloned As String = CType(str.Clone(), String)
Dim copied As String = String.Copy(str)
Console.WriteLine(str = cloned) ' Prints True
Console.WriteLine(str = copied) ' Prints True
Console.WriteLine(str Is cloned) ' Prints True
Console.WriteLine(str Is copied) ' Prints False
End Sub
End Module
Dim cloned As String = CType(str.Clone(), String)The string value is cloned and copied.
Dim copied As String = String.Copy(str)
Console.WriteLine(str = cloned) ' Prints TrueThe contents of all three strings are the same.
Console.WriteLine(str = copied) ' Prints True
Console.WriteLine(str Is cloned) ' Prints TrueThe
Console.WriteLine(str Is copied) ' Prints False
Is
operator compares the two reference objects. Therefore comparing a copied string to the original string returns False. Because they are two distinct objects. Formatting strings
In the next examples, we will format strings. The .NET Framework has a feature called composite formatting. It is supported byFormat()
and WriteLine()
methods. A method takes a list of objects and a composite format string as input. The format string consists of fixed string plus some format items. These format items are indexed placeholders which correspond to the objects in the list. The format item has the following syntax:
{index[,length][:formatString]}The index component is mandatory. It is a number starting from 0 that refers to an item from the list of objects. Multiple items can refer to the same element of the list of objects. An object is ignored, if it is not referenced by a format item. If we refer outside the bounds of the list of objects, a runtime exception is thrown.
The length component is optional. It is the minimum number of characters in the string representation of the parameter. If positive, the parameter is right-aligned; if negative, it is left-aligned. If it is specified, there must by a colon separating the index and the length.
The formatString is optional. It is a string that formats a value is a specific way. It can be used to format dates, times, numbers or enumerations.
Here we show, how to work with length component of the format items. We print three columns of numbers to the terminal. Left, middle and right aligned.
Option Strict OnWe print a simple message to the console. We use only index component of the format item.
Imports System
Module Example
Dim oranges As Byte = 2
Dim apples As Byte = 4
Dim bananas As Byte = 3
Sub Main()
Dim str1 As String = "There are {0} oranges, {1} apples and " + _
"{2} bananas"
Dim str2 As String = "There are {1} oranges, {2} bananas and " + _
"{0} apples"
Console.WriteLine(str1, oranges, apples, bananas)
Console.WriteLine(str2, apples, oranges, bananas)
End Sub
End Module
Dim str1 As String = "There are {0} oranges, {1} apples and " + _The {0}, {1}, and {2} are format items. We specify the index component. Other components are optional.
"{2} bananas"
Console.WriteLine(str1, oranges, apples, bananas)Now we put together the composite formatting. We have the string and the list of objects (oranges, apples, bananas). The {0} format item refers to the oranges. The
WriteLine()
method replaces the {0} format item with the contents of the oranges variable. Dim str2 As String = "There are {1} oranges, {2} bananas and " + _The order of the format items referring to the objects is notation important.
"{0} apples"
$ ./format1.exe
There are 2 oranges, 4 apples and 3 bananas
There are 2 oranges, 3 bananas and 4 apples
Option Strict OnWe print numbers in a decimal and hexadecimal format. We also align the numbers using the length component.
Module Example
Sub Main()
Console.WriteLine("{0} {1, 12}", _
"Decimal", "Hexadecimal")
Console.WriteLine("{0:D} {1,8:X}", _
502, 546)
Console.WriteLine("{0:D} {1,8:X}", _
345, 765)
Console.WriteLine("{0:D} {1,8:X}", _
320, 654)
Console.WriteLine("{0:D} {1,8:X}", _
120, 834)
Console.WriteLine("{0:D} {1,8:X}", _
620, 454)
End Sub
End Module
Console.WriteLine("{0:D} {1,8:X}", _The {0:D} format item specifies, the first item from the list of supplied objects will be taken and formatted in the decimal format. The {1,8:X} format item takes the second item. Formats it in the hexadecimal format (:X). And the string length will be 8 characters (,8). Because the number has only three characters, it is right aligned and padded with empty strings.
502, 546)
$ ./format2.exeRunning the example.
Decimal Hexadecimal
502 222
345 2FD
320 28E
120 342
620 1C6
The last two examples will format numeric and date data.
Option Strict OnThe example demonstrates the standard formatting specifiers for numbers. Number 126 is printed in five different formats; normal, scientific, currency, percent and hexadecimal.
Module Example
Sub Main()
Console.WriteLine(String.Format("Number: {0:N}", 126))
Console.WriteLine(String.Format("Scientific: {0:E}", 126))
Console.WriteLine(String.Format("Currency: {0:C}", 126))
Console.WriteLine(String.Format("Percent: {0:P}", 126))
Console.WriteLine(String.Format("Hexadecimal: {0:X}", 126))
End Sub
End Module
$ ./format3.exeOutput.
Number: 126.00
Scientific: 1.260000E+002
Currency: $126.00
Percent: 12,600.00 %
Hexadecimal: 7E
Finally, we will format date and time data.
Option Strict OnThe preceding example demonstrates the standard formatting specifiers for dates.
Module Example
Sub Main()
Dim today As DateTime = DateTime.Now()
Console.WriteLine(String.Format("Short date: {0:d}", today))
Console.WriteLine(String.Format("Login date: {0:D}", today))
Console.WriteLine(String.Format("Short time: {0:t}", today))
Console.WriteLine(String.Format("Long time: {0:T}", today))
Console.WriteLine(String.Format("Month: {0:M}", today))
Console.WriteLine(String.Format("Year: {0:Y}", today))
End Sub
End Module
$ ./format4.exeOutput.
Short date: 8/18/2010
Login date: Wednesday, August 18, 2010
Short time: 11:29 PM
Long time: 11:29:40 PM
Month: August 18
Year: August, 2010
This part of the Visual Basic tutorial covered strings.
0 comments:
Post a Comment