亲爱的程序员,
我正在使用C#Visual Studio 2013编写代码,我刚刚意识到在执行Trim()
时我可能不需要使用Replace(" ", string.Empty)
。
以下是一个例子:
SanitizedString = RawString
.Replace("/", string.Empty)
.Replace("\\", string.Empty)
.Replace(" ", string.Empty)
.Trim();
由于我以前的代码结构不同,我没有注意到它:
SanitizedString = RawString.Trim()
.Replace("/", string.Empty)
.Replace("\\", string.Empty)
.Replace(" ", string.Empty);
我知道这些方法的工作方式不同,因为Trim()
会删除所有空格字符,而Replace(" ", string.Empty)
只会删除空格字符。
这就是为什么我有一个不同的问题。
我没有看到任何明显的方法来实现替换。我的问题是,当我希望从字符串中删除所有空白字符时,我将如何处理它?</ p>
我发现了以下内容:
Efficient way to remove ALL whitespace from String?
但由于我从未使用正则表达式,我对如何将其应用于字符串犹豫不决?
答案 0 :(得分:14)
尝试使用 Linq 过滤掉空格:
using System.Linq;
...
string source = "abc \t def\r\n789";
string result = string.Concat(source.Where(c => !char.IsWhiteSpace(c)));
Console.WriteLine(result);
结果:
abcdef789
答案 1 :(得分:5)
一种方法是使用正则表达式
public static string ReplaceAllWhiteSpaces(string str) {
return Regex.Replace(str, @"\s+", String.Empty);
}
取自:https://codereview.stackexchange.com/questions/64935/replace-each-whitespace-in-a-string-with-20
答案 2 :(得分:2)
这个问题的答案并不像看起来那么容易。问题不是实际编码替换,而是定义空白区域。
例如,this Wikipedia article列出了许多具有Unicode属性WSpace
的字符(Unicode代码点),以及许多相关字符,大多数人会认为这些字符是空格,但不是拥有WSpace
属性。
鉴于此,我永远不会依赖某些正则表达式解析器认为\s
的内容,因为这实际上并不是标准化的。我很确定C#的正则表达式解析器不会将U+2001
之类的代码点视为空格,因此不会从字符串中删除它们。
这对您的申请可能有问题,也可能不是问题;它取决于你必须处理的字符串是如何被首先过滤的。但是如果要处理外语字符串(换句话说:包含ASCII范围之外字符的字符串),你将不得不考虑它。
这样做时,请记住正则表达式很慢。如果你需要定义你自己的替换品(由于上面提到的原因),你应该使用更轻量级的替换功能(如果C#或其组件提供一个 - 我不使用C#,所以我不喜欢知道)。
答案 3 :(得分:1)
只需传递方法调用中的字符串,它将返回不带空格的字符串。
import React, { Component } from 'react';
import { Layout } from 'antd';
import SideMenu from './side-menu';
import MainHeader from './main-header';
import MainFooter from './main-footer';
const { Content } = Layout;
class App extends Component {
constructor(props) {
super(props);
this.state = {
collapsed: false,
};
}
toggle = () => {
this.setState({
collapsed: !this.state.collapsed,
});
}
render() {
return (
<Layout style={{ minHeight: '100vh' }}>
<SideMenu collapsed={this.state.collapsed}/>
<Layout>
<MainHeader triggerParentUpdate={this.toggle} collapsed={this.state.collapsed}/>
<Content style={{ margin: '24px 16px', padding: 24, background: '#ffffff', minHeight: 280 }}>
{this.props.children}
</Content>
<MainFooter/>
</Layout>
</Layout>
);
}
}
export default App;
答案 4 :(得分:1)
对于任何访问此页面的人,都有一篇出色的CodeProject文章,作者在此对几种不同的解决方案进行了基准测试。他提出的最快的完全托管的解决方案(基本上)是:
public static string RemoveAllWhitespace(string str) {
var len = str.Length;
var src = str.ToCharArray();
var dstIdx = 0;
for (var i = 0; i < len; i++) {
var ch = src[i];
switch (ch) {
case '\u0020': case '\u00A0': case '\u1680': case '\u2000': case '\u2001':
case '\u2002': case '\u2003': case '\u2004': case '\u2005': case '\u2006':
case '\u2007': case '\u2008': case '\u2009': case '\u200A': case '\u202F':
case '\u205F': case '\u3000': case '\u2028': case '\u2029': case '\u0009':
case '\u000A': case '\u000B': case '\u000C': case '\u000D': case '\u0085':
break;
default:
src[dstIdx++] = ch;
break;
}
}
return new string(src, 0, dstIdx);
}
对于什么是正确的空白字符集,当然有很多警告和意见分歧,但是基本信息非常有用(例如RegEx到目前为止是最慢的)。
此处全文:https://www.codeproject.com/Articles/1014073/Fastest-method-to-remove-all-whitespace-from-Strin
注意:我与作者或CodeProject没有任何隶属关系。我只是通过普通的网络搜索找到这篇文章的。
答案 5 :(得分:0)
string Abcd = Console.ReadLine();
string wspace = "";
int len = Abcd.Length;
for (int i = 0; i <= len-1; i++)
{
if (Abcd[i] != ' ')
{
wspace = wspace + Abcd[i];
}
}
Console.WriteLine("The Sring Without Space Is= '"+wspace+"'");
Console.ReadLine();
答案 6 :(得分:0)
这可能很方便:
string message = Console.ReadLine().Trim().ToLower();
string message_without_space = message.Split(' ').Aggregate((a, b) => a + b).ToString();