如何用C#中的一个空格替换字符串中的多个空格?

例:

1 2 3  4    5

将会:

1 2 3 4 5

#1楼

使用LINQ的另一种方法:

 var list = str.Split(' ').Where(s => !string.IsNullOrWhiteSpace(s));str = string.Join(" ", list);

#2楼

老派

string oldText = "   1 2  3   4    5     ";
string newText = oldText.Replace("  ", " " + (char)22 ).Replace( (char)22 + " ", "" ).Replace( (char)22 + "", "" );Assert.That( newText, Is.EqualTo( " 1 2 3 4 5 " ) );

#3楼

对于那些不喜欢Regex ,这里是使用StringBuilder的方法:

    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();}

在我的测试中,与静态编译的Regex相比,使用大量中小型字符串时,此方法平均快16倍。 与非编译或非静态Regex相比,这应该更快。

请记住,它不会删除开头或结尾的空格,只有这样多次出现。


#4楼

RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
tempo = regex.Replace(tempo, " ");

#5楼

string xyz = "1   2   3   4   5";
xyz = string.Join( " ", xyz.Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries ));

#6楼

根据Joel的建议,总结其他答案,并希望在我进行研究时有所改善:

您可以使用Regex.Replace()进行此操作:

string s = Regex.Replace ("   1  2    4 5", @"[ ]{2,}", " ");

或使用String.Split()

static class StringExtensions
{public static string Join(this IList<string> value, string separator){return string.Join(separator, value.ToArray());}
}//...string s = "     1  2    4 5".Split (" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Join (" ");

#7楼

比这简单得多:

while(str.Contains("  ")) str = str.Replace("  ", " ");

#8楼

我喜欢使用:

myString = Regex.Replace(myString, @"\s+", " ");

因为它将捕获任何类型的空格(例如,制表符,换行符等),并将其替换为单个空格。


#9楼

我刚刚写了一个我喜欢的新Join ,所以我想用它来回答:

public static string Join<T>(this IEnumerable<T> source, string separator)
{return string.Join(separator, source.Select(e => e.ToString()).ToArray());
}

关于此的很酷的事情之一是,它通过在元素上调用ToString()来处理不是字符串的集合。 用法仍然相同:

//...string s = "     1  2    4 5".Split (" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Join (" ");

#10楼

我知道这已经很老了,但是在尝试完成几乎同一件事时遇到了这个问题。 在RegEx Buddy中找到了此解决方案。 此模式将用单个空格替换所有双重空格,并修剪前导和尾随空格。

pattern: (?m:^ +| +$|( ){2,})
replacement: $1

由于我们正在处理空白空间,因此有点难以阅读,因此这里还是用“ _”代替了“空格”。

pattern: (?m:^_+|_+$|(_){2,})  <-- don't use this, just for illustration.

“(?m:”构造启用了“多行”选项。我通常喜欢在模式本身中包括我可以包含的所有选项,这样它就更加独立了。


#11楼

我认为Matt的答案是最好的,但我不认为这是正确的。 如果要替换换行符,则必须使用:

myString = Regex.Replace(myString, @"\s+", " ", RegexOptions.Multiline);

#12楼

您可以简单地在一站式解决方案中做到这一点!

string s = "welcome to  london";
s.Replace(" ", "()").Replace(")(", "").Replace("()", " ");

如果愿意,您可以选择其他方括号(甚至其他字符)。


#13楼

这是一个较短的版本,仅在您仅执行一次时才应使用,因为它每次调用时都会创建一个Regex类的新实例。

temp = new Regex(" {2,}").Replace(temp, " ");

如果您不太熟悉正则表达式,请执行以下简短说明:

{2,}使正则表达式搜索其前面的字符,并查找2到无限次之间的子字符串。
.Replace(temp, " ")用空格替换字符串temp中的所有匹配项。

如果要多次使用它,这是一个更好的选择,因为它会在编译时创建regex IL:

Regex singleSpacify = new Regex(" {2,}", RegexOptions.Compiled);
temp = singleSpacify.Replace(temp, " ");

#14楼

myString = Regex.Replace(myString, " {2,}", " ");

#15楼

即使执行简单的任务,正则表达式也可能相当慢。 这将创建可以在任何string使用的扩展方法。

    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();}}

它可以这样使用:

string testValue = "This contains     too          much  whitespace."
testValue = testValue.ReduceWhitespace();
// testValue = "This contains too much whitespace."

#16楼

试试这个方法

private string removeNestedWhitespaces(char[] st)
{StringBuilder sb = new StringBuilder();int indx = 0, length = st.Length;while (indx < length){sb.Append(st[indx]);indx++;while (indx < length && st[indx] == ' ')indx++;if(sb.Length > 1  && sb[0] != ' ')sb.Append(' ');}return sb.ToString();
}

像这样使用它:

string test = removeNestedWhitespaces("1 2 3  4    5".toCharArray());

#17楼

我可以用这个删除空格

while word.contains("  ")  //double spaceword = word.Replace("  "," "); //replace double space by single space.
word = word.trim(); //to remove single whitespces from start & end.

#18楼

不使用正则表达式:

while (myString.IndexOf("  ", StringComparison.CurrentCulture) != -1)
{myString = myString.Replace("  ", " ");
}

可以在短字符串上使用,但是在带有很多空格的长字符串上效果不佳。


#19楼

没有正则表达式,没有Linq ...删除前导和尾随空格,以及将任何嵌入的多个空格分段减少到一个空格

string myString = "   0 1 2  3   4               5  ";
myString = string.Join(" ", myString.Split(new char[] { ' ' },
StringSplitOptions.RemoveEmptyEntries));

结果:“ 0 1 2 3 4 5”


#20楼

许多答案提供了正确的输出,但是对于那些寻求最佳性能的人,我确实将Nolanar的答案 (这是性能的最佳答案)提高了约10%。

public static string MergeSpaces(this string str)
{if (str == null){return null;}else{StringBuilder stringBuilder = new StringBuilder(str.Length);int i = 0;foreach (char c in str){if (c != ' ' || i == 0 || str[i - 1] != ' ')stringBuilder.Append(c);i++;}return stringBuilder.ToString();}}

#21楼

使用正则表达式模式

    [ ]+    #only spacevar text = Regex.Replace(inputString, @"[ ]+", " ");

#22楼

StringBuilder和Enumerable.Aggregate()的混合使用,作为字符串的扩展方法:

using System;
using System.Linq;
using System.Text;public static class StringExtension
{public static string StripSpaces(this string s){return s.Aggregate(new StringBuilder(), (acc, c) =>{if (c != ' ' || acc.Length > 0 && acc[acc.Length-1] != ' ')acc.Append(c);return acc;}).ToString();}public static void Main(){Console.WriteLine("\"" + StringExtension.StripSpaces("1   Hello       World  2   ") + "\"");}
}

输入:

"1   Hello       World  2   "

输出:

"1 Hello World 2 "

#23楼

      // Mysample stringstring str ="hi you           are          a demo";//Split the words based on white sapcevar demo= str .Split(' ').Where(s => !string.IsNullOrWhiteSpace(s));//Join the values back and add a single space in betweenstr = string.Join(" ", demo);//output: string str ="hi you are a demo";

#24楼

这是对Nolonar原始答案的略微修改

检查字符是否不仅是空格,而且是任何空格,请使用以下命令:

它将用单个空格替换任何多个空格字符。

public static string FilterWhiteSpaces(string input)
{if (input == null)return string.Empty;var stringBuilder = new StringBuilder(input.Length);for (int i = 0; i < input.Length; i++){char c = input[i];if (i == 0 || !char.IsWhiteSpace(c) || (char.IsWhiteSpace(c) && !char.IsWhiteSpace(strValue[i - 1])))stringBuilder.Append(c);}return stringBuilder.ToString();
}

如何在C#中用单个空格替换多个空格?相关推荐

  1. python中空格替换_在Python中用单个空格替换多个空格

    本问题已经有最佳答案,请猛点这里访问. 我有这根绳子: mystring = 'Here is  some   text   I      wrote   ' 如何将双空格.三空格(-)替换为一个空格 ...

  2. 正则表达式用单个空格替换多个空格

    给定一个像这样的字符串: "The dog has a long tail, and it is RED!" 什么样的jQuery或JavaScript魔术可以用来将空间限制为最多 ...

  3. 如何在Excel中用单元格中的单个空格替换多个空格?

    在Excel中,正常的"查找和替换"功能可能无法很好地解决我们的问题,因此,我们可以应用一个简单的公式来处理它. 请这样做: 1. 输入以下公式: = TRIM(SUBSTITUT ...

  4. 如何在Vim中用换行符替换字符

    我想替换每个,在由新线当前文件: :%s/,/\n/g 但它会插入看起来像^@而不是实际的换行符. 该文件不在DOS模式下或其他任何状态. 我该怎么办? 如果您像我一样好奇,请查看问题, 为什么\\ ...

  5. 如何在 Vim 中用换行符替换字符

    问: 我正在尝试用新行替换当前文件中的每个 ,: :%s/,/\n/g 但它会插入看起来像 ^@ 的东西,而不是实际的换行符.该文件未处于 DOS 模式或任何状态. 我应该怎么办? 如果您像我一样好奇 ...

  6. python怎样输出多个空格_Python实现将多个空格换为一个空格.md的方法

    python 如何把很多空格变成一个空格?现在小编的日志...是纯粹的空格还是制表位?你告诉小编,小编给你写一个. python中,如何将字符串中多个空格分隔的修改为一例如,有一个字符串"1 ...

  7. java 正则 空格_Java中关于空格的正则表达式

    public class Test { public static void main(String[] args) { String s = "GET             /index ...

  8. 有一种空格叫做--不间断空格(空格保存到数据库变成了问号)

    半角空格:\u0020  英文符号  代码中常用 全角空格:\u3000  中文符号  中文文章中常用 不间断空格:\u00A0  不间断空格  主要在 office 中使用,让一个单词在结尾处不会换 ...

  9. Excel技巧:删除换行符、文本前空格、文本中间空格

    转自:微点阅读  https://www.weidianyuedu.com Excel中的空格有三种,强制换行符,文本前空格,文本中间空格,下面分别来介绍一下操作方法. 我们用处理excel数据的时候 ...

最新文章

  1. 腾讯最大股东收购了 Stack Overflow,以后“抄代码”都要付费了么?
  2. 《曾国藩发迹史》--汪衍振
  3. LINUX 内核代码备忘录
  4. HTTPS 跟 HTTP区别简述
  5. 马化腾谈滴滴;苹果供应商研发柔性玻璃;丁磊谈沉迷手机 | 极客头条
  6. 漫谈 Clustering (5): Hierarchical Clustering
  7. 离散数学及其应用 第三章:命题逻辑
  8. 战德臣计算机导论第5讲,地方高校“计算机导论”算法思维培养的教学设计
  9. DVWA靶机安装(超详细教程)
  10. fiddler+mitmproxy+夜神模拟器安装
  11. 【毕业设计】机器学习车牌识别系统 - python opencv
  12. excel表格筛选某一列重复数据
  13. 安装新的package后出现异常错误
  14. chromium下载编译过程
  15. 量化分析自己的生活——日活统计表,但求客观公正,勿违彼时言!
  16. 【Unity】 结合DoTween制作抛物线效果
  17. GetElementByName
  18. java求三角形周长 面积_用java如何求三角形的周长和面积?
  19. OPPO救砖通用:oppo A33T(移动定制版)黑砖救砖
  20. Typora使用方法

热门文章

  1. 帮我看看这个是什么意思 c++代码
  2. 人生必做清单-----持续更新
  3. ListView getChildCount 以及getChildAt 坑 误区指南
  4. JavaScript 仿ios滑动选择器
  5. Activity销毁重建导致LiveData数据倒灌
  6. Android10.0系统启动之Launcher(桌面)启动流程-[Android取经之路]
  7. NodeJs初学者经典入门解析
  8. Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签
  9. JavaScript语言基础6
  10. 微信小游戏开发教程-新建项目