【问题标题】:How can I ensure a string has no more than a single whitespace anywhere in it?如何确保字符串中的任何位置都不超过一个空格?
【发布时间】:2019-11-12 16:06:00
【问题描述】:

我将一个字符串作为输入,并且由于稍后进行一些处理,因此该字符串在字符串中的任何位置不包含 2 个或更多连续空格是至关重要的。

例如

string foo = "I am OK" is a valid string
string foo = " I am OK " is a valid string
string foo = "  I am OK" is NOT a valid string due to the initial double white space
string foo = "I am OK  " is NOT a valid string due to the trailing double whitespaces
string foo = " I am  OK " is NOT a valid string since it has 2 whitespaces between am and OK

我想你明白了,我尝试使用以下代码规范化字符串

string normalizedQuery = apiInputObject.Query.Replace(" ", "");

但这仅适用于我确定字符串中有单个空格,这就是为什么我需要确保字符串永远不会有更多这样我可以使用该替换。

如何确保字符串符合我的格式?

【问题讨论】:

    标签: c# string whitespace removing-whitespace


    【解决方案1】:

    您可以尝试使用正则表达式模式@"^(?!.*[ ]{2}).*$":

    Match result = Regex.Match("One space", @"^(?!.*[ ]{2}).*$");
    if (result.Success) {
        Console.WriteLine("ONLY ONE SPACE OR LESS");
    }
    

    【讨论】:

    • @EugeneRyabtsev 我修好了。在我的辩护中,我最初是通过手机回答的,那里很难阅读。
    【解决方案2】:

    根据您的要求,我认为您只需将两个连续的空格替换为一个。

    foo=foo.Replace("  "," ");
    

    正如 Gian 所指出的,“重复直到字符串中没有双空格”。

    【讨论】:

    • 问题是它可能是 1 2 或 n 个空格 我不知道用户可能输入什么,所以我必须确保每个单词之间只有 1 个
    • 重复直到字符串中没有双空格
    【解决方案3】:

    您可以使用String.Contains 来查找" ",但是如果用户可以键入任何内容,那么您遇到的问题比简单的空格更大,例如各种 unicode 空格、象形文字等等(也就是说,除非您的后处理只寻找简单的空格,否则是 unicode 容错的)。

    【讨论】:

      【解决方案4】:

      使用IndexOf

      public static void Main()
      {
          var tests = new string[]
          {
               "I am OK",
               " I am OK ",
               "  I am OK",
               "I am OK  ",
               " I am  OK " 
          };
          foreach (var test in tests)
          {
              var hasDoubleSpace = (test.IndexOf("  ") != -1);
              Console.WriteLine("'{0}' {1} double spaces", test, hasDoubleSpace ? "has" : "does not have");
          }
      }
      

      输出:

      'I am OK' does not have double spaces
      ' I am OK ' does not have double spaces
      '  I am OK' has double spaces
      'I am OK  ' has double spaces
      ' I am  OK ' has double spaces
      

      Fiddle

      【讨论】:

        【解决方案5】:

        我会逐个字符地遍历整个字符串,并检查两个并排的字符是否为空格:

        for(int i=0; i<foo.Length-1; i++){
            if(foo[i] == ' ' && foo[i+1] == ' '){
                return false;
            }
        }
        return true;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-29
          • 2023-03-16
          • 2022-12-09
          • 2020-05-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-05
          相关资源
          最近更新 更多