You want to remove spaces or new lines from the beginning or ending of your string in the C# programming language. Use the framework's Trim method to do this efficiently. This document has several examples and tips about Trim on strings.
String input: " This is an example string. " Trim method result: "This is an example string." String input: "This is an example string.\r\n\r\n" Trim method result: "This is an example string." String input: "\t, again and again." TrimStart method: "again and again." Note: TrimStart specified to remove commas, spaces, and tabs.
Here we see a basic example of how to remove space characters from the beginning and end of a C# string. Note that when you call Trim on a string, it copies the string and returns a modified version of that copy. The original is not changed.
~~~ Program that uses Trim (C#) ~~~
using System;
class Program
{
static void Main()
{
// Input string
string st = " This is an example string. ";
// Call Trim instance method.
// This returns a new string copy.
st = st.Trim();
Console.WriteLine(st);
}
}
~~~ Output of the program ~~~
(Spaces were removed)
This is an example string.Description of example code. The Trim method is used with no parameters, meaning it uses a default set of whitespace characters to Trim. You can provide an array parameter of chars, as we see in one of the following examples. The Console.WriteLine statement prints the copied string that has no spaces at the beginning or end. Other than removing the spaces, nothing has been changed.
Here we see that you can remove new lines from strings with Trim(). Trim will remove both UNIX style line breaks and Windows style line breaks. This example shows Windows line breaks, \r\n.
~~~ Another program that uses Trim (C#) ~~~
using System;
class Program
{
static void Main()
{
// Input string
string st = "This is an example string.\r\n\r\n";
Console.WriteLine("[{0}]",
st);
st = st.Trim();
Console.WriteLine("[{0}]",
st);
}
}
~~~ Output of the program ~~~
[This is an example string.
]
[This is an example string.]Description of example code. The example uses two Console.WriteLine method calls, each of which format the string they display. The output is surrounded by square brackets. The Trim method call copies the input string, modifies the copy, and then returns a new copy, which doesn't contain the ending line break characters.
Here we see the very common operation of trimming each line from a file. This works well with StreamReader or other File methods. The following example demonstrates Trim on each line in the file. The file contains three lines, each ending with a space.
=== Program that uses Trim with file (C#) ===
using System;
using System.IO;
class Program
{
static void Main()
{
foreach (string line in File.ReadAllLines("file.txt"))
{
Console.WriteLine("[" + line + "]");
string trimmed = line.Trim();
Console.WriteLine("[" + trimmed + "]");
}
// Note:
// In the loop you can use both strings in their
// original forms. No string is actually changed.
// Trim copies the string.
}
}
=== Output of the program ===
[This file ]
[This file]
[Has some ]
[Has some]
[Whitespace you don't want ]
[Whitespace you don't want]Description of example code. The code uses File.ReadAllLines to get all the lines in the specified file. Then it loops through the lines using foreach. Each line is trimmed. Because all the lines are in memory, the original file is not changed and neither is the array returned by ReadAllLines. The final comment shows the output on an example file.
This site contains a separate article that is an example of the TrimStart instance method on the string type in the C# programming language. Please consult the article for a detailed discussion of TrimStart and its usage patterns.
It is very useful to call TrimEnd to remove punctuation from the ends of strings, such as the ending punctuation in a sentence. This topic is covered in more detail elsewhere on this site.
(See TrimEnd, Removing Trailing Chars.)
Looking in Reflector at the MSIL code, Trim calls an internal method called TrimHelper. TrimHelper contains several loops, and uses an O(N2) algorithm. This means it loops within loops. Finally, it calls InternalSubString.
Trimming many chars. If you have to Trim many different chars, it would be more performant to use a lookup table to test if the character is to be removed. Therefore, implementing a custom Trim that uses an array lookup instead of a nested loop would be faster. This was not benchmarked here.
As part of my analysis, I benchmarked how Trim performs on different kinds of strings. For example, I benchmarked Trim on a string that has characters to be trimmed, against a string that doesn't need changing.
Benchmark results. My results were that Trim takes more time when it has more characters to remove from the source string. This is because it iterates through the characters until it can't trim any more. No numbers available in this document.
There are other ways you will need to change or replace the whitespace in your C# strings. For example, you may need to change whitespace in the middle of strings, not just on the end as you can do with Trim methods. See the appropriate article for much more detail.
(See Whitespace String Methods for Newlines, Tabs and Spaces.)
Here, we note that there are other ways to Trim strings, such as with regular expressions in the System.Text.RegularExpressions namespace. These approaches are documented elsewhere on this site.
Here we saw several examples and tips regarding Trim in the C# language. I also warned you about potential problems with Trim and also pointed to various alternatives. As a developer, I have used C# Trim in every nontrivial program I have written. In normal usage it is a very effective and fast method.