Strings
Telerik Academy Alpha
Table of contents
What are strings?
What are strings?
-
string is a data type
-
System.String class
-
-
Sequence of characters (Unicode symbols)
0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
H | e | l | l | o |
0x12345 | 0x12346 | 0x12347 | 0x12348 | 0x12349 |
Index |
---|
Variable |
Address |
string text = "Hello";
What are strings?
-
In the namespace System there is a class String which represents the string in C#
-
Strings use Unicode to support multiple languages and alphabets
-
Immutable
-
String objects are immutable: they cannot be changed after they have been created.
-
All the methods and operators actually return new object
string text = "Hello, Telerik Academy";
Console.WriteLine(text[0]);
// Compilation error indexer 'string.this[int]'
// cannot be assigned to -- it is read only
text[0] = 'A';
Immutable
string text = "Hello";
// This is a completely new object
text += ", Telerik Academy!";
Console.WriteLine(text); // Hello, Telerik Academy!
Immutable - Demo
Strings are arrays?
-
String objects have similarities to arrays but they are NOT arrays
-
It is like array of characters
-
Fixed Length ( str.Length)
-
Indexers ( str[0], str[1], ... str[str.Length-1] )
-
You can iterate them with for and foreach loops
-
String operations
Compare
Compare
string text = "Telerik Academy";
string text1 = "telerik academy";
Console.WriteLine(text == text1); // False
-
Equality compare with == operator
-
case-sensitive comparison
-
string text = "Telerik Academy";
string text1 = "Telerik Academy";
Console.WriteLine(text == text1); // True
Compare
-
Equality compare with Equals() method
-
the same as == in C# (ex: in Java this is not true)
-
you can control if it is case-sensitive/insensitive
-
with the second parameter StringComparison enum
-
-
string a = "Telerik Academy";
string a1 = "telerik academy";
// False
Console.WriteLine(a.Equals(a1));
// True
Console.WriteLine(a.Equals(a1, StringComparison.CurrentCultureIgnoreCase));
Concatenate
Concatenate
-
Concatenation of strings could be done with +/+= operators
string text = "Telerik Academy";
string text1 = "Alpha";
string newText = text + " " + text1;
Concatenate
-
Or with Concat() method
string text = "Telerik Academy";
string text1 = "Alpha";
string space = " ";
string newText = string.Concat(text, space, text1, space, "Rocks!");
// Telerik Academy Alpha Rocks!
Search in strings
Search
-
When you need to find a character in a string
-
IndexOf() method
-
returns the position of the element
-
or negative number if not found
-
case-sensitive but could be changed
-
-
string text = "Telerik Academy";
Console.WriteLine(text.IndexOf('T')); // 0
Console.WriteLine(text.IndexOf('t')); // -1
Search
-
IndexOf() has many useful overloads
-
with different parameters
-
startIndex, count comparisonType, etc.
-
-
string text = "Telerik Academy";
text.IndexOf('t'); // -1
text.IndexOf("te", StringComparison.CurrentCultureIgnoreCase); // 0
Search
-
In addition to IndexOf() there are other useful methods for searching
-
LastIndexOf()
-
IndexOfAny()
-
LastIndexOfAny()
-
string text = "Telerik Academy";
Console.WriteLine(text.IndexOf('e')); // 1
Console.WriteLine(text.LastIndexOf('e')); // 12
Extract parts
Extract
-
You can get part of the string with optional start and end position
string text = "Telerik Academy";
Console.WriteLine(text.Substring(8)); // Academy
Console.WriteLine(text.Substring(0, 7)); // Telerik
Extract delimited
-
You can all the parts of the string as array by delimiter (",", ".", " " or any symbol you need)
string text = "Telerik Academy";
string[] arr = text.Split(' ');
Console.WriteLine(arr.Length); // 2
Extract delimited
-
There could be empty string when splitting
string text = "Telerik Academy ";
// ["Telerik", "Academy", ""] empty string at the end
string[] arr = text.Split(' ');
Console.WriteLine(arr.Length); // 3
Extract delimited
-
How to handle empty strings (StringSplitOptions.RemoveEmptyEntries)
string text = "Telerik Academy ";
// you should pass array of chars or strings
var splitSymbols = new char[] { ' ', ',' };
// ["Telerik", "Academy"]
string[] arr = text.Split(splitSymbols, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(arr.Length); // 2
Replace and remove
Replace
-
You can replace all occurrences of a char/string in another string with new value
-
Replace() method
-
string text = "Telerik Academy";
// Replace returns new string (strings are immutable)
var newString = text.Replace("Telerik", "Alpha");
Console.WriteLine(newString); // Alpha Academy
Remove/Delete
-
You can remove part of a string
-
Remove() method
-
startIndex
-
count (optional)
-
-
string text = "Telerik Academy";
// Remove returns new string (strings are immutable)
var newString = text.Remove(0, 8);
Console.WriteLine(newString); // Academy
Casing, trimming
Casing
-
You can change character casing
-
ToUpper()
-
ToLower()
-
etc.
-
string text = "Telerik Academy";
// ToUpper returns new string (strings are immutable)
var newString = text.ToUpper();
Console.WriteLine(newString); // TELERIK ACADEMY
Trim
-
You can trim the string (any character) from start/end
-
Trim() - trims start and end from whitespace
-
TrimEnd() - only the end
-
TrimStart() - only the start
-
all the methods could contain different symbols to trim
-
-
string text = " Telerik Academy!";
// The methods could be chained
var newString = text.Trim().TrimEnd('!');
Console.WriteLine(newString);
Demo
StringBuilder
Mutate the string
StringBuilder
-
Performing multiple concatenations (ex: in for loop) is a slow operation due to the immutability if the strings
-
Every time you add a string to an existing one, there is a new object created and all the previous values are copied in it
-
It is slow if you want to add multiple times or build a long string
-
If you just make a single concatenation it is okay to use simple string concatenation
-
-
StringBuilder
StringBuilder sBuilder = new StringBuilder();
sBuilder.Append("Telerik");
sBuilder.Append(" Academy");
T | e | l | e | r | i | k | A | c |
---|
a | d | e | m | y |
---|
StringBuilder
-
StringBuilder uses internal array and this makes it faster
-
In the new versions of .NET (>= 4.0) StringBuilder uses Linked List of StringBuilder instances
-
Adding is much faster
-
-
If you need to add many strings or build a large string (ex: in a for loop) you must use StringBuilder
StringBuilder
int count = 10000;
string str = string.Empty;
StringBuilder strBuilder = new StringBuilder();
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
str += i;
}
Console.WriteLine($"String concatenate: {sw.ElapsedMilliseconds}"); // ~ 12500 ms
sw.Start();
for (int i = 0; i < count; i++)
{
strBuilder.Append(i);
}
Console.WriteLine($"StringBuilder append: {sw.ElapsedMilliseconds}"); // ~ 10 ms
Summary
String summary
-
Strings are immutable
-
Cannot be rewritten
-
-
All the operations over strings return new string (object)
-
Therefore they are relatively slow
-
-
All the objects in C# have ToString() method
-
If you need to add many chars/strings and make multiple such operations
-
Consider using StringBuilder
-
Resources
Questions?
[C#] Strings
By telerikacademy
[C#] Strings
- 1,196