【问题标题】:How do I split a string by a multi-character delimiter in C#?如何在 C# 中通过多字符分隔符拆分字符串?
【发布时间】:2010-11-10 17:54:34
【问题描述】:

如果我想使用单词分隔符来拆分字符串怎么办?

例如,This is a sentence

我想拆分is 并得到Thisa sentence

Java 中,我可以发送一个字符串作为分隔符,但我如何在C# 中完成此操作?

【问题讨论】:

    标签: c# .net string


    【解决方案1】:

    您可以使用Regex.Split 方法,如下所示:

    Regex regex = new Regex(@"\bis\b");
    string[] substrings = regex.Split("This is a sentence");
    
    foreach (string match in substrings)
    {
       Console.WriteLine("'{0}'", match);
    }
    

    编辑:这满足您给出的示例。请注意,普通的 String.Split 也会在单词“This”末尾的“is”上拆分,因此我使用 Regex em> 方法并在“is”周围包含单词边界。但是请注意,如果您只是错误地编写了这个示例,那么 String.Split 可能就足够了。

    【讨论】:

    • @ 编辑:我也不确定,但是如果他的目标是只删除单词“is”,你仍然可以使用正常的字符串拆分并在两侧填充空格。
    • 这也行不通(至少没有更多的努力),因为你不知道空间应该在左边、右边还是两者兼而有之,而不知道在字符串中拆分的单词。
    • 似乎过于复杂,因为 String.Spity 已经允许您在字符串上拆分...
    • 我已经在我的答案编辑、上面的评论和另一个答案的 3 cmets 中解决了这个问题。 String.Split 不适用于问题中提供的示例。我不会通过解释原因再次重复自己。如果您想知道,可以阅读所有其他 cmets。
    • 请注意,正则表达式拆分方法不会删除变量上的前定界符和尾随定界符... :(
    【解决方案2】:

    http://msdn.microsoft.com/en-us/library/system.string.split.aspx

    文档中的示例:

    string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";
    string[] stringSeparators = new string[] {"[stop]"};
    string[] result;
    
    // ...
    result = source.Split(stringSeparators, StringSplitOptions.None);
    
    foreach (string s in result)
    {
        Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
    }
    

    【讨论】:

    • 这实际上返回: 'Th' ' ' ' a sentence' 带有问题中给出的示例。也许这是他真正想要的,但不是他指定的。
    • 这只是一个例子......重点是:有一个 String.Split 以字符串作为分隔符。
    • 是的,但它不符合问题的规定。你必须使用一些更聪明的东西来获得指定的输出。现在,指定的问题是否实际上是提问者 wants 是一个不同的问题,但这里提出的问题不能仅用 String.Split 来简单回答。
    • 还是不行。如果您在要拆分的单词中包含空格,则它们不会包含在输出中。如果您检查问题中给出的示例,您会注意到它们实际上包含空格。拆分“is”会给你“This”和“a sentence”,而不是“This”和“a sentence”。注意“This”结尾和“a sentence”开头的细微空格。同样,这个答案可能是提问者真正想要的,但这不是他所问的,我再说一遍,String.Split 不会轻易解决它。
    • @IRBMe 你读过这个问题吗? '我想在“是”上分开。所以我会得到“This”和“a sentence”'。看到结果中的空格???这正是斯普利特所做的。
    【解决方案3】:

    您可以使用 String.Replace() 将所需的拆分字符串替换为字符串中未出现的字符,然后在该字符上使用 String.Split 拆分结果字符串以获得相同的效果。

    【讨论】:

      【解决方案4】:
      string s = "This is a sentence.";
      string[] res = s.Split(new string[]{ " is " }, StringSplitOptions.None);
      
      for(int i=0; i<res.length; i++)
          Console.Write(res[i]);
      

      编辑:“is”在数组的两边都用空格填充,以保持您希望从句子中删除单词“is”和单词“this "保持原状。

      【讨论】:

        【解决方案5】:
        string strData = "This is much easier"
        int intDelimiterIndx = strData.IndexOf("is");
        int intDelimiterLength = "is".Length;
        str1 = strData.Substring(0, intDelimiterIndx);
        str2 = strData.Substring(intDelimiterIndx + intDelimiterLength, strData.Length - (intDelimiterIndx + intDelimiterLength));
        

        【讨论】:

        • 在发布代码之前,您可能应该先尝试通过编译器运行它,除非您表示没有。第一行缺少分号,并且 str1 和 str2 未定义。更不用说代码实际上并不能按照 OP 的要求工作。此代码将其拆分为“Th”和“更容易”。
        【解决方案6】:

        根据这篇文章的现有回复,这简化了实施:)

        namespace System
        {
            public static class BaseTypesExtensions
            {
                /// <summary>
                /// Just a simple wrapper to simplify the process of splitting a string using another string as a separator
                /// </summary>
                /// <param name="s"></param>
                /// <param name="pattern"></param>
                /// <returns></returns>
                public static string[] Split(this string s, string separator)
                {
                    return s.Split(new string[] { separator }, StringSplitOptions.None);
                }
        
        
            }
        }
        

        【讨论】:

        • +1,这需要扩展方法。这不是内置重载之一,这几乎是愚蠢的。
        • @ToddMenier “几乎”是什么意思?
        【解决方案7】:

        ...简而言之:

        string[] arr = "This is a sentence".Split(new string[] { "is" }, StringSplitOptions.None);
        

        【讨论】:

          【解决方案8】:
          var dict = File.ReadLines("test.txt")
                         .Where(line => !string.IsNullOrWhitespace(line))
                         .Select(line => line.Split(new char[] { '=' }, 2, 0))
                         .ToDictionary(parts => parts[0], parts => parts[1]);
          
          
          or 
          
              enter code here
          
          line="to=xxx@gmail.com=yyy@yahoo.co.in";
          string[] tokens = line.Split(new char[] { '=' }, 2, 0);
          
          ans:
          tokens[0]=to
          token[1]=xxx@gmail.com=yyy@yahoo.co.in
          

          【讨论】:

            【解决方案9】:

            或者使用这个代码; (相同:新字符串[])

            .Split(new[] { "Test Test" }, StringSplitOptions.None)
            

            【讨论】:

              【解决方案10】:

              这是一个使用字符串分隔符进行拆分的扩展函数:

              public static string[] Split(this string value, string seperator)
              {
                  return value.Split(new string[] { seperator }, StringSplitOptions.None);
              }
              

              使用示例:

              string mystring = "one[split on me]two[split on me]three[split on me]four";
              var splitStrings = mystring.Split("[split on me]");
              

              【讨论】:

                猜你喜欢
                • 2013-03-03
                • 2018-05-05
                • 1970-01-01
                • 2013-10-30
                • 2010-11-29
                • 1970-01-01
                • 2014-03-02
                • 2015-06-29
                相关资源
                最近更新 更多