在C#的实际开发工作中,字符串空格处理是高频出现的需求,不同场景下的空格去除要求各不相同,比如有的只需要去掉首尾的空格,有的需要去掉字符串里所有的空格,还有的需要把连续的多个空格合并成一个。下面我们就来逐一讲解对应的实现方法。

去除字符串首尾空格
如果只需要去掉字符串开头和结尾的空格,不需要处理中间的空格,可以使用string类自带的Trim方法,这个方法是最常用也最高效的。
Trim方法基础用法
Trim方法默认会去除字符串开头和结尾的所有空白字符,包括空格、制表符、换行符等,使用方法非常简单:
using System;
class Program
{
static void Main()
{
string testStr = " Hello C# ";
// 去除首尾空格
string result = testStr.Trim();
Console.WriteLine($"原字符串: [{testStr}]");
Console.WriteLine($"处理后: [{result}]");
}
}
去除指定字符
如果不需要去除所有空白字符,只想去除首尾的普通空格,或者想去除其他指定字符,可以给Trim方法传入字符数组作为参数:
using System;
class Program
{
static void Main()
{
string testStr = " Hello C# ";
// 只去除首尾的普通空格
string result = testStr.Trim(new char[] { ' ' });
Console.WriteLine($"处理后: [{result}]");
string testStr2 = "***Hello C#***";
// 去除首尾的星号
string result2 = testStr2.Trim(new char[] { '*' });
Console.WriteLine($"处理后: [{result2}]");
}
}
仅去除开头或结尾空格
如果只需要去除字符串开头的空格,可以使用TrimStart方法;如果只需要去除结尾的空格,可以使用TrimEnd方法,用法和Trim一致:
using System;
class Program
{
static void Main()
{
string testStr = " Hello C# ";
string trimStartResult = testStr.TrimStart();
string trimEndResult = testStr.TrimEnd();
Console.WriteLine($"去除开头空格: [{trimStartResult}]");
Console.WriteLine($"去除结尾空格: [{trimEndResult}]");
}
}
去除字符串所有空格
如果需要把字符串里所有的空格都去掉,不管是在开头、结尾还是中间,可以使用Replace方法或者正则表达式实现。
使用Replace方法
Replace方法可以把字符串中指定的子串替换成另一个子串,我们只要把空格替换成空字符串就可以实现去除所有空格的效果,这个方法性能比较好,适合大多数场景:
using System;
class Program
{
static void Main()
{
string testStr = " He llo C# ";
// 替换所有空格为空字符串
string result = testStr.Replace(" ", "");
Console.WriteLine($"原字符串: [{testStr}]");
Console.WriteLine($"去除所有空格后: [{result}]");
}
}
使用正则表达式
如果需要去除的不仅是普通空格,还包括其他空白字符比如制表符、换行符等,可以使用正则表达式的s匹配所有空白字符,然后替换成空字符串:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string testStr = " HetllonC# ";
// 匹配所有空白字符并替换为空
string result = Regex.Replace(testStr, @"s", "");
Console.WriteLine($"原字符串: [{testStr}]");
Console.WriteLine($"去除所有空白字符后: [{result}]");
}
}
去除字符串中间多余空格
有些场景下,我们需要保留字符串里的单个空格,但是要把连续的多个空格合并成一个,比如用户输入的姓名可能不小心打了多个空格,这时候可以用正则表达式实现。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string testStr = " He llo C# ";
// 把连续的空白字符替换成单个空格,再去除首尾空格
string result = Regex.Replace(testStr, @"s+", " ").Trim();
Console.WriteLine($"原字符串: [{testStr}]");
Console.WriteLine($"处理后: [{result}]");
}
}
不同方法对比
我们可以根据不同场景选择合适的方法,下面是常用方法的对比:
| 方法 | 适用场景 | 性能 |
|---|---|---|
| Trim/TrimStart/TrimEnd | 仅去除首尾空白字符 | 高 |
| Replace(" ", "") | 去除所有普通空格 | 较高 |
| Regex.Replace | 去除所有空白字符、合并连续空格等复杂场景 | 较低 |
注意事项
Trim系列方法不会修改原字符串,而是返回一个新的字符串,因为C#中的字符串是不可变的。- 使用
Replace方法去除空格时,只能去除普通空格,不能去除制表符、换行符等其他空白字符。 - 正则表达式的方法虽然灵活,但是性能比字符串自带方法差,如果不是必要场景,优先使用字符串自带方法。
- 处理用户输入的字符串时,建议先判断字符串是否为
null或者空字符串,避免空引用异常。
下面是包含空判断的完整示例:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string testStr = null;
// 先判断字符串是否有效
if (!string.IsNullOrEmpty(testStr))
{
string result = testStr.Trim();
Console.WriteLine($"处理结果: [{result}]");
}
else
{
Console.WriteLine("字符串为空,无需处理");
}
}
}