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

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

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


当前回答

这是另一种变体:

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

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

其他回答

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

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

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

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

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

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

我的解决方案是使用分裂和连接,它是令人惊讶的快,事实上是这里最快的顶部答案。

str = string.Join("", str.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries));

计时10,000循环的简单字符串与空白inc新行和制表符

分裂/连接= 60毫秒 Linq chararray = 94毫秒 Regex = 437毫秒

通过在方法中包装它来改进它,赋予它意义,同时也使它成为一个扩展方法……

public static string RemoveWhitespace(this string str) {
    return string.Join("", str.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries));
}

Regex太夸张了;只是在字符串上使用扩展(感谢Henk)。这是微不足道的,应该是框架的一部分。总之,这是我的实现:

public static partial class Extension
{
    public static string RemoveWhiteSpace(this string self)
    {
        return new string(self.Where(c => !Char.IsWhiteSpace(c)).ToArray());
    }
}