How to trim “ a b c ” into “a b c”
Possible Duplicate:
How do I replace multiple spaces with a single space in C#?
如何将像" ab c "这样的字符串中的空格修剪为"a b c"中最优雅的方法是什么?所以,重复的空白被缩小为一个空格。
- @纳文,你所链接到的问题不能处理字符串周围的空间。
- @卢塞罗:总有一种说法是"以东1"(0)。:)
- @纳文,重点是它是不同的。如果你知道如何使用regex和trim,那么这个问题甚至是不必要的。
- @卢塞罗,没什么不同
不带regex的解决方案,只需将其放在表中:
1 2 3
| char[] delimiters = new char[] { ' '}; // or null for 'all whitespace'
string[] parts = txt .Split(delimiters, StringSplitOptions .RemoveEmptyEntries);
string result = String.Join("", parts ); |
- 与使用\s的regex解决方案不同,这只会删除空格(u+0020)字符,而不是其他被分类为空白的字符。这符合Q的标准,但在实践中,我希望任何这样的需求也适用于标签等。
- @理查德:OP可以用定界符变量微调,使用delimiters = null对应\s。
- 我一直在想(就像这里的这个问题一样)为什么许多简洁的正则表达式更喜欢复杂、相对昂贵的字符串操作。我的座右铭是使用合适的工具来完成这项工作,regex是专门为文本正则表达式的"简单"模式匹配设计的工具。(亨克,别误会我,我一点也不批评你的回答,但我不理解很多人的对手学习regex并在"家里"使用它们-请注意,我也不会用regex创建完整的解析器或数字验证器,它们有明确的限制。)
- @卢塞罗完全正确。人们必须有一个regex恐惧症或什么。爱奥登的回答是一句简洁的话,比这三句难听的话有更少的赞成票。
- @alpha123,或者我的,有亨克一半的赞成票,这是故意不添加Trim()到混合,但使用regex来做这一切。(我不太在乎,几个小时前,我在今天的200次重复中做了个上限…)
- @卢塞罗,嗯,不知怎么看不到你的。可能是最有效的,虽然有点难读(IMO)。
您可以使用Regex进行以下操作:
1
| Regex.Replace(my_string, @"\s+","").Trim(); |
- -1:不能去掉绳子周围的空间。
- 好吧,那你为什么要给-1答案是好的…它可以很容易地修复…没有意义
- @托马斯:因为还有其他几个正确的答案。愚蠢的每个人都去编辑他们的…我觉得很蹩脚。如果你第一次弄错了就把它删掉。
- 我没有投反对票,但是:添加Trim是一个很难看的解决方法,因为它将导致字符串再次被处理。一个正则表达式可以一次完成这个任务。
- @卢塞罗:但是当你把你的regex和这个比较时,我想知道简单的trim()是否更好。我的意思是更好的可读性和可维护性。
- @麻风病人这个网站的主要目的是帮助别人,其次是为自己树立名声。如果人们编辑他们的答案只是为了帮助需要帮助的人。如果你觉得自己像个名誉猎手……这是你的问题!
- @Henkholterman,有些正则表达式会变得杂乱无章,但这一个却不是。用很少的正则表达式知识,阅读和理解就足够容易了。另外,由于regex在内部被转换为一个高效的automata,它的性能应该类似于"更简单"的regex,用于折叠空间,您还可以编译regex以获得更好的性能。
- 我建议使用@s 2,
4
- + 1我喜欢它。但我想知道有多少初级程序员会理解它。:)
- 了解一些regex基础知识是一项重要的技能imho,特别是因为它也在客户端Web开发人员的工具集中(许多下级将在其中进行操作)。所以如果他们不明白,他们就得查一下…它不太复杂,不能被一个雷杰克斯新手伊莫霍解剖。
- 当然,它可以被理解出来,但即使有了regex的知识,也需要一些时间进行精神分析。使用.Trim()的版本中的regex更简洁,维护起来更容易。(不过,我不是投反对票——在某些情况下,这个版本可能更受欢迎,比如说,如果它真的更快的话,它就是一个紧密的循环)
- @投反对票的人,请解释清楚!
使用Trim方法从字符串的开头和结尾删除空格,并使用正则表达式减少多个空格:
1
| s = Regex.Replace(s.Trim(), @"\s{2,}",""); |
你可以做
1
| Regex.Replace(str,"\\s+","").Trim() |
http://msdn.microsoft.com/en-us/library/e7f5w83z.aspx
1 2 3 4 5 6
| Regex rgx = new Regex ("\\s+");
string str ;
str =Console .ReadLine();
str =rgx .Replace(str, "");
str = str .Trim();
Console .WriteLine(str ); |
使用正则表达式:
1
| "( ){2,}" //Matches any sequence of spaces, with at least 2 of them |
并使用它将所有匹配项替换为""。
我还没有在C中完成,我需要更多的时间来了解文档中的内容,所以您必须自己找到这些内容。对不起的。
使用正则表达式
1 2 3
| String test =" a b c";
test = Regex.Replace(test,@"\s{2,}","");
test = test.Trim(); |
此代码使用Regex将任何2个或多个空格替换为一个空格,然后在开始和结束时删除。
- 实际上,regex只用一个空格替换了两个空格。如果要用空格替换任意数量的空格,则应该是\s{2,}或\s\s+或甚至\s+(注意,由于\s与所有空格(包括制表符等字符)匹配,因此结果会有所不同)。
- @卢塞罗,你是对的,但它会起作用,因为它会选择每2个空格作为一个组,所以如果我们有4个空格,这意味着我们必须替换组
- 修复现在正在工作,但在输出中将两个组替换为两个空格之前(输出不会作为输入重新处理)。
1
| Regex.Replace(str,"[\s]+","") |
然后调用trim除去前导空格和尾随空格。