如何在C#中使用多字符分隔符拆分字符串?

Sao*_*obi 231 .net c# string

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

例如,This is a sentence.

我想分开is并得到Thisa sentence.

Java,我可以发送一个字符串作为分隔符,但我如何实现这一点C#

bru*_*nde 278

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);
}
Run Code Online (Sandbox Code Playgroud)

  • 这实际上返回:'Th''''一个句子',问题中给出的例子.也许这就是他真正想要的,但这不是他指定的. (7认同)
  • 这只是一个例子......重点是:有一个String.Split将字符串作为分隔符. (6认同)
  • 仍然不太奏效.如果在要拆分的单词中包含空格,则它们不包含在输出中.如果你检查问题中给出的例子,你会注意到它们实际上包括空格.分裂为"是"会给你"这个"和"一个句子",而不是"这个"和"一个句子".注意"This"结尾处的微妙空格和"一句话"的开头.同样,这个答案可能就是提问者真正想要的,但这并不是他所要求的,而且我再说一遍,*String.Split*不会轻易解决它. (3认同)
  • @IRBMe你读过这个问题吗?'我想拆分"是".所以我会得到"这个"和"一个句子".看到结果中的空格??? 这与斯普利特的做法非常相似. (2认同)

IRB*_*BMe 55

您可以使用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);
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我已经在我的回答编辑中解决了这个问题,在上面的评论和另外一个答案的3条评论中.*String.Split*不适用于问题中提供的示例.我不会再通过解释原因重复自己.如果您想知道,可以阅读所有其他评论. (3认同)

eka*_*808 34

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

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


    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1,这是一种扩展方法的尖叫.几乎是愚蠢的,这不是内置的重载之一. (9认同)
  • @ToddMenier你的意思是"差不多"? (9认同)

aha*_*ker 28

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]);
Run Code Online (Sandbox Code Playgroud)

编辑:"是"是为了保护你的事实填补双方在阵列中的空间需要道"就是"从句子和单词删除"这个"保持不变.

  • 当然这打破了句子"它就是它的本质". (9认同)

Par*_*Par 8

...简而言之:

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


Cag*_*das 6

或使用此代码;(相同: new String[] )

.Split(new[] { "Test Test" }, StringSplitOptions.None)
Run Code Online (Sandbox Code Playgroud)


Pau*_*ier 5

您可以使用String.Replace()将所需的拆分字符串替换为字符串中不存在的字符,然后对该字符使用String.Split将结果字符串拆分为相同的效果.