删除多个空格,c#

删除多个空格,c#,c#,whitespace,C#,Whitespace,我试图做的是将空白大小减少到1个字符(删除任何不必要的空白。我应该如何处理该任务 注:没有正则表达式 编辑:谢谢,已经成功了,谢谢你的拆分+加入建议。不幸的是,无法对任何回复进行投票,因为沮丧的青少年已经-再次批评我问了“一个对网站来说太简单的问题” EDIT2.:如果句子前面有空格,我如何确保它不会删除?你是这样做的 string myString = "I'm too lazy for research."; myString = Regex.Replace(myStr

我试图做的是将空白大小减少到1个字符(删除任何不必要的空白。我应该如何处理该任务

注:没有正则表达式

编辑:谢谢,已经成功了,谢谢你的拆分+加入建议。不幸的是,无法对任何回复进行投票,因为沮丧的青少年已经-再次批评我问了“一个对网站来说太简单的问题”

EDIT2.:如果句子前面有空格,我如何确保它不会删除?

你是这样做的

string myString = "I'm too            lazy for research.";
myString = Regex.Replace(myString, @"\s+", " ");

string类的扩展

public static string RemoveExcessSpaces(this string str)
{
    StringBuilder sb = new StringBuilder(str.Length);
    bool first = true;
    for (int i = 0; i < str.Length; i++)
    {
        char c = str[i];
        switch (c)
        {
            case '\r':
            case '\n':
            case '\t':
            case ' ':
                if(first)
                {
                    sb.Append(c);
                    first = false;
                }
                else
                    continue;
                break;
            default:
                sb.Append(c);
                first = true;
                break;
        }
    }
    return sb.ToString();
}

当然,应该被视为空白的字符集可以通过一个字符列表(或使用)来定义,但这可能会更好地提高性能

string.Join(" ", 
   myString.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
编辑

作为扩展

    public static string RemoveWhiteSpaces(this string s)
    {
        return string.Join(" ", s.Split(new char[] { ' ' }, 
               StringSplitOptions.RemoveEmptyEntries));
    }
myString.RemoveWhiteSpaces();
您可以使用以下代码:

public static String WhiteSpaceReducer(String value) {
  if (String.IsNullOrEmpty(value))
    return value;

  Boolean wasWhiteSpace = false;
  StringBuilder Sb = new StringBuilder();

  foreach (Char Ch in value) 
    if (Char.IsWhiteSpace(Ch)) {
      if (!wasWhiteSpace)
        Sb.Append(Ch);

      wasWhiteSpace = true;
    }
    else {
      wasWhiteSpace = false;
      Sb.Append(Ch);
    }

  return Sb.ToString();
}


...

String test = "   test   me  out  ";
String result = WhiteSpaceReducer(test);

你尝试过什么,或者只是在这里请求解决方案吗?使用for循环不是一门火箭科学…根据文本分割文本,然后如果字符串长度大于1,则连接所有字符串。我尝试过使用句子=句子。替换(“,”);但这是一个关于
var res=string.join(“),myString.Split(new char[]{''},StringSplitOptions.removemptyentries))
@Damith会起作用,但我不认为创建一个字符串数组然后重新加入它们对性能非常有好处(特别是对于长文本)
“我对研究太懒了。”
这是怎么回事?但在一个地方有三个或更多的空白?)这会删除所有的空格,不是吗?是的,这会删除所有的空格,这不是我想要的for@TheProvost应该可以,但请注意问题中的“NO Regex:)
public static String WhiteSpaceReducer(String value) {
  if (String.IsNullOrEmpty(value))
    return value;

  Boolean wasWhiteSpace = false;
  StringBuilder Sb = new StringBuilder();

  foreach (Char Ch in value) 
    if (Char.IsWhiteSpace(Ch)) {
      if (!wasWhiteSpace)
        Sb.Append(Ch);

      wasWhiteSpace = true;
    }
    else {
      wasWhiteSpace = false;
      Sb.Append(Ch);
    }

  return Sb.ToString();
}


...

String test = "   test   me  out  ";
String result = WhiteSpaceReducer(test);