You need to iterate over each character in a string efficiently in order to examine or process each character.
C# provides two
methods for iterating strings. The first is by using a
foreach
loop, as follows:
string testStr = "abc123"; foreach (char c in testStr) { Console.WriteLine(c.ToString( )); }
This method is quick and easy.
Unfortunately, it is somewhat less flexible than the second method,
which uses the for
loop instead of a
foreach
loop to iterate over the string. For
example:
string testStr = "abc123"; for (int counter = 0; counter < testStr.Length; counter++) { Console.WriteLine(testStr[counter].ToString( )); }
The foreach
loop is simpler and thus less
error-prone, but it lacks flexibility. In contrast, the
for
loop is slightly more complex, but it makes up
for that in flexibility.
The for
loop method uses the indexer of the string
variable testStr
to get the character located at
the position indicated by the counter
loop index.
Care must be taken not to run over the bounds of the string array
when using this type of looping mechanism.
A for
loop is flexible enough to change how
looping over characters in a string is performed. For example, the
loop could be quickly modified to start and end at a specific point
in the string by simply changing the
initializer
and
conditional
expressions of the
for
loop. Characters can be skipped by changing
the iterator
expression to increment the
counter
variable by more than one. The string can
also be iterated in reverse order by changing the
for
loop expressions, as shown:
for (int counter = testStr.Length - 1; counter >= 0; counter--) { Console.WriteLine(testStr[counter].ToString( )); }
This example allows a string to be created containing the characters of the original string in reverse order:
string revTestStr = ""; for (int counter = testStr.Length - 1; counter >= 0; counter--) { revTestStr += testStr[counter]; } Console.WriteLine(revTestStr);
It should be noted that each of these methods was compiled using the
/optimize
compiler option. However, adding or
removing this option has very little impact on the resulting IL code.