我正在调用一个REST API,并收到一个XML响应。它返回一个工作区名称列表,我正在编写一个快速的IsExistingWorkspace()方法。因为所有的工作空间都是由没有空格的连续字符组成的,我假设找出特定工作空间是否在列表中最简单的方法是删除所有空格(包括换行符)并这样做(XML是从web请求接收到的字符串):

XML.Contains("<name>" + workspaceName + "</name>");

我知道这是区分大小写的,我就靠这一点了。我只是需要一种方法来有效地删除字符串中的所有空白。我知道RegEx和LINQ可以做到,但我对其他想法持开放态度。我最关心的是速度。


当前回答

这是我所知道的最快的方法,即使你说你不想使用正则表达式:

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

如果您计划多次这样做,请在评论中注明@ hyperhuman,创建并存储一个Regex实例。这将节省每次构建它的开销,这比您想象的要昂贵得多。

private static readonly Regex sWhitespace = new Regex(@"\s+");
public static string ReplaceWhitespace(string input, string replacement) 
{
    return sWhitespace.Replace(input, replacement);
}

其他回答

我想很多人来这里是为了消除空格。:

string s = "my string is nice";
s = s.replace(" ", "");

试试c#中字符串的替换方法。

XML.Replace(" ", string.Empty);

从字符串中删除所有空格的简单方法,"example"是初始字符串。

String.Concat(example.Where(c => !Char.IsWhiteSpace(c))

这是另一种变体:

public static string RemoveAllWhitespace(string aString)
{
  return String.Join(String.Empty, aString.Where(aChar => aChar !Char.IsWhiteSpace(aChar)));
}

与大多数其他解决方案一样,我没有执行详尽的基准测试,但这对于我的目的来说已经足够好了。

只是一个选择,因为它看起来很不错:)-注:Henks的回答是这些回答中最快的。

input.ToCharArray()
 .Where(c => !Char.IsWhiteSpace(c))
 .Select(c => c.ToString())
 .Aggregate((a, b) => a + b);

在“这是一个简单的测试”上测试1,000,000次循环

这个方法= 1.74秒 Regex = 2.58秒 new String (Henks) = 0.82秒