问题描述
如题,在.NET/C#应用程序开发中,如何将多个空格替换成一个(单个)空格呢?
比如有如下的字符串:
1 2 3 4 5
期望将多个空格替换成单个空格后的结果为:
1 2 3 4 5
使用C#应该如何实现呢?
方案一
使用正则表达式,如下:
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
tempo = regex.Replace(tempo, " ");
方案二
另一种正则表达式的正则写法,如下:
myString = Regex.Replace(myString, @"\s+", " ");
方案三
使用string.Join()
和string.Split()
方法,如下:
string xyz = "1 2 3 4 5";
xyz = string.Join( " ", xyz.Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries ));
方案四
使用LINQ实现,如下:
var list = str.Split(' ').Where(s => !string.IsNullOrWhiteSpace(s));
str = string.Join(" ", list);
方案五
使用for
循环遍历字符串中的每个字符,以下为一个静态扩展方法:
public static class StringExtension
{
public static String ReduceWhitespace(this String value)
{
var newString = new StringBuilder();
bool previousIsWhitespace = false;
for (int i = 0; i < value.Length; i++)
{
if (Char.IsWhiteSpace(value[i]))
{
if (previousIsWhitespace)
{
continue;
}
previousIsWhitespace = true;
}
else
{
previousIsWhitespace = false;
}
newString.Append(value[i]);
}
return newString.ToString();
}
}
方案六
另一个使用遍历字符串每个字符的实现方式,如下:
public static string FilterWhiteSpaces(string input)
{
if (input == null)
return string.Empty;
StringBuilder stringBuilder = new StringBuilder(input.Length);
for (int i = 0; i < input.Length; i++)
{
char c = input[i];
if (i == 0 || c != ' ' || (c == ' ' && input[i - 1] != ' '))
stringBuilder.Append(c);
}
return stringBuilder.ToString();
}
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册