我正在调用一个REST API,并收到了一个XML响应。它返回一个工作区名称列表,我正在编写一个快速的IsExistingWorkspace()
方法。由于所有工作区都由不带空格的连续字符组成,因此我假设找出特定工作区是否在列表中的最简单方法是删除所有空格(包括换行符)并执行此操作(XML是从web请求接收的字符串):
XML.Contains("<name>" + workspaceName + "</name>");
我知道它是区分大小写的,我依赖于此。我只需要一种方法来有效地删除字符串中的所有空格。我知道RegEx和LINQ可以做到这一点,但我对其他想法持开放态度。我最关心的是速度。
发布于 2011-06-02 19:38:30
这是我所知道的最快的方法,即使你说你不想使用正则表达式:
Regex.Replace(XML, @"\s+", "");
在注释中记入@hypehuman,如果您计划多次执行此操作,请创建并存储一个Regex实例。这将节省每次构建它的开销,这比您想象的更昂贵。
private static readonly Regex sWhitespace = new Regex(@"\s+");
public static string ReplaceWhitespace(string input, string replacement)
{
return sWhitespace.Replace(input, replacement);
}
发布于 2013-01-29 19:58:53
我有一种不使用regexp的替代方法,它似乎执行得很好。这是Brandon Moretz答案的延续:
public static string RemoveWhitespace(this string input)
{
return new string(input.ToCharArray()
.Where(c => !Char.IsWhiteSpace(c))
.ToArray());
}
我在一个简单的单元测试中对其进行了测试:
[Test]
[TestCase("123 123 1adc \n 222", "1231231adc222")]
public void RemoveWhiteSpace1(string input, string expected)
{
string s = null;
for (int i = 0; i < 1000000; i++)
{
s = input.RemoveWhitespace();
}
Assert.AreEqual(expected, s);
}
[Test]
[TestCase("123 123 1adc \n 222", "1231231adc222")]
public void RemoveWhiteSpace2(string input, string expected)
{
string s = null;
for (int i = 0; i < 1000000; i++)
{
s = Regex.Replace(input, @"\s+", "");
}
Assert.AreEqual(expected, s);
}
对于1,000,000次尝试,第一个选项(没有regexp)的运行时间不到一秒(在我的机器上是700ms),第二个选项需要3.5秒。
发布于 2011-06-02 19:43:28
在C#中尝试字符串的replace方法。
XML.Replace(" ", string.Empty);
https://stackoverflow.com/questions/6219454
复制相似问题