我可以使用LINQ去除字符串中的重复空格吗?

Mic*_*per 4 c# linq linq-to-objects

一个快速的脑筋急转弯:给一个字符串

This  is a string with  repeating   spaces
Run Code Online (Sandbox Code Playgroud)

LINQ表达的最终结果是什么?

This is a string with repeating spaces
Run Code Online (Sandbox Code Playgroud)

谢谢!

作为参考,这是一种非LINQ方式:

private static IEnumerable<char> RemoveRepeatingSpaces(IEnumerable<char> text)
{
  bool isSpace = false;
  foreach (var c in text)
  {
    if (isSpace && char.IsWhiteSpace(c)) continue;

    isSpace = char.IsWhiteSpace(c);
    yield return c;
  }
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*sey 14

这不是linq类型的任务,使用正则表达式

string output = Regex.Replace(input," +"," ");
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用linq将其应用于字符串集合.

  • @Michael Teper:就我个人而言,我认为使用LINQ扩展方法解决这个问题的其他解决方案都是严厉的解决方案.您可以在一个非常简短,可读的行中解决问题,或者您可以使用一个不太明显的方法,需要2个或更长的行.哪个更有意义? (3认同)

Ani*_*Ani 6

public static string TrimInternal(this string text)
{
  var trimmed = text.Where((c, index) => !char.IsWhiteSpace(c) || (index != 0 && !char.IsWhiteSpace(text[index - 1])));
  return new string(trimmed.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

  • 很酷,我没有意识到有一个Where重载提供了一个索引.很高兴知道! (2认同)