Most software needs a way to store human-readable data in the form of characters and words. This chapter explores the use of string and character data types. The topic of building strings from multiple variables using a concept known as string interpolation is also covered.
Character data type
When talking about characters, we are referring to individual letters and numbers. For example, the letter ‘a’ is a character, as is the visual representation of the number ‘1’. Such characters may be stored in a C# char type. A char can contain one character and one character only. It is important to be aware that a character is not limited to those in the English alphabet. Characters are stored internally in C# as grapheme clusters. A grapheme cluster combines two or more Unicode scalars to represent a single visible character.
In addition, characters can be used for counting in loops and even in mathematical expressions. To assign a character to a variable or constant, surround the character with single quotes:
char myVar = 'a'; const char myConst = 'b';
The following lines assign a variety of different characters to char type variables:
char myChar1 = 'f'; char myChar2 = ':'; char myChar3 = 'X';
Characters may also be referenced using Unicode code points. The following example assigns a smiley face symbol (☺) to a variable using Unicode and then prints it:
char myChar4 = '\u263A'; System.Console.WriteLine(myChar4);
Output:
☺
Special characters
In addition to the standard set of characters outlined above, a range of special characters (also called escape sequences) is available for specifying items such as a new line, tab, or a specific Unicode value within a string. These special characters are identified by prefixing the character with a backslash (a concept referred to as escaping).
The escape sequence for a new line special character, for example, is \n. The following code fragment uses this new line special character to add blank lines within a string:
System.Console.WriteLine("This is a line of text.\n\n\nAn this is another.");Output:
This is a line of text.
An this is another.Code language: JavaScript (javascript)
Any character preceded by a backslash is considered a special character and treated accordingly. This raises the question as to what to do if you actually want a backslash character. This is achieved by escaping the backslash itself (\\):
System.Console.WriteLine("C# special characters are escaped using the \\ character.);Output:
C# special characters are escaped using the \ character.Code language: PHP (php)
Commonly used special characters supported by C# are as follows:
\n– Newline\r– Carriage return\t– Horizontal tab\\– Backslash\”– Double quote (used when placing a double quote into a string declaration)\’– Single quote (used when placing a single quote into a string declaration)\unn– Single-byte Unicode scalar where nn is replaced by two hexadecimal digits representing the Unicode character.\unnnn– Double-byte Unicode scalar where nnnn is replaced by four hexadecimal digits representing the Unicode character.\unnnnnnnn– Four-byte Unicode scalar where nnnnnnnn is replaced by eight hexadecimal digits representing the Unicode character.
String data type
Previously, we looked at storing individual characters in a char variable. While this works for storing a single letter, number, or Unicode scalar, it is of little use for storing entire words or sentences. For this purpose, the string variable type is supported by C#. Constants or variables of type string can store a string of any number of characters.
String literal values are surrounded by double quotes ("). For example:
string myString = "This is string is literal.";
Verbatim string literals
A regular string value will interpret special characters. The following code, for example, consists of a string containing multiple special characters:
string myString = "This is some text\n\n\tand this is some more.";
As shown above, the only way to make the text span multiple lines is to use the \n escape character when using a standard string literal. The following code, for example, will not compile:
string myString = "This is some text
and this is some more.";For a string literal to be interpreted precisely as written, it must be declared as a verbatim string literal type.
Verbatim string literals ignore the special meaning of escape characters and can span multiple lines. To declare a string literal as verbatim, prefix the declaration with the @ character. For example, this allows literals such as the following to be expressed:
string myString = @"Hi Team,
The file located at 'C:\Users\demo\newdata.txt'
uses the \t sequence to insert tabs into text.
Best regards
John";
System.Console.WriteLine(myString);Output:
Hi Team,
The file located at 'C:\Users\demo\newdata.txt'
uses the \t sequence to insert tabs into text.
Best regards
JohnCode language: JavaScript (javascript)
String interpolation
Strings may also be constructed using combinations of strings, variables, constants, expressions, and function calls using string interpolation.
This involves embedding items into a string by prefixing the literal declaration with $ character and wrapping the item as follows where {item} is a constant or variable name, a function call, or even an expression such as a mathematical calculation:
int count = 10;
string = $"The current count is {count}";The following code, for example, creates a new string variable using string interpolation to embed content from a variety of sources before outputting it to the console:
string userName = "John";
int inboxCount = 25;
int maxCount = 100;
var message = $"{userName} has {inboxCount} messages. Message capacity remaining is {maxCount - inboxCount}.";
System.Console.WriteLine(message);Output:
John has 25 messages. Message capacity remaining is 75.
If you need to wrap content in braces ({}) without it being interpreted as interpolated values, use double braces ({{}}) as follows:
string userName = "John";
var message = $"{userName} reported seeing error code 10 {{low battery}}.";
System.Console.WriteLine(message);Output:
John reported seeing error code 10 {low battery}.
Interpolation may also be used within verbatim string literals by prefixing the string with either $@ or @$:
string userName = "John";
int inboxCount = 25;
int maxCount = 100;
var message = $@"{userName} has {inboxCount} messages.
Message capacity remaining is {maxCount - inboxCount}.";
System.Console.WriteLine(message);Output:
John has 25 messages.
Message capacity remaining is 75.
Note: Interpolated string literals can only be assigned to variables. An attempt to assign an interpolated string to a constant will result in a compiler error.
