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

246

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

例如,This is a sentence

我想以 is 为分隔符进行拆分,并获得 Thisa sentence

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

11个回答

296

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

7
实际上,根据问题中给出的例子,这个返回值是“'Th' ' ' ' a sentence'”。也许这正是他想要的,但这不是他指定的内容。 - IRBMe
7
这只是一个例子...重点是:有一个名为String.Split的函数可以用字符串作为分隔符。 - bruno conde
1
是的,但它并没有做到问题所指定的。你必须使用一些更聪明的东西来获得指定的输出。现在,问题所指定的是否实际上是提问者想要的是另一个问题,但是这里提出的问题不能仅通过String.Split轻松回答。 - IRBMe
这个有点聪明,他只需要将分隔符字符串更改为“是”(包括空格),即使是不聪明的例子也可以正常工作。 - Oliver Friedrich
3
仍然不能完全运作。如果将单词中的空格包括在内以便进行分割,则输出中不会包括这些空格。如果您查看问题中给出的示例,您会注意到它们实际上包含了空格。在“ is ”上进行分离将会给您“This”和“a sentence”,而不是“This ”和“ a sentence”。请注意,“This”末尾和“a sentence”开头的微妙空格。再次强调,这个答案可能是问题提问者实际想要的答案,但它并不是他所询问的,我重申,String.Split 无法轻松解决此问题。 - IRBMe
2
@IRBMe,你看过问题了吗?“我想在'is'上分割。所以我会得到'This '和'a sentence'”。看到结果中的空格了吗?这正是Split所做的。 - bruno conde

56

您可以使用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方法并在"is"周围包含了单词边界。然而,请注意,如果你只是错误地编写了这个例子,那么String.Split可能就足够了。


@编辑:我也不确定,但如果他的目标仅是删除单词“is”,则仍然可以使用普通字符串拆分并在两侧填充空格。 - ahawker
1
那也不行(至少不是没有更多的努力),因为你不知道空格应该放在左边、右边还是两边,而不知道在字符串中被分割的单词的位置。 - IRBMe
似乎过于复杂,因为String.Split方法已经允许你在一个字符串上进行分割了... - Ed S.
3
我已经在我的答案编辑、上面的评论以及另一个答案的3个评论中解释过这个问题。String.Split对于问题中提供的示例不起作用。我不会再重复一遍为什么不行了。如果你想知道原因,可以阅读所有其他的评论。 - IRBMe
请注意,正则表达式的split方法不会删除变量前面和后面的分隔符... :( - melaos

37

根据此贴的现有回答,这样实现更简单 :)

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


    }
}

10
+1,这明显需要一个扩展方法。几乎有些傻眼,这不是内置重载之一。 - Todd Menier
9
你的意思是什么,"almost"是什么意思? - mwardm

30
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”保持不变的事实。


8

简而言之:

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

6
或者使用这段代码; (同样:new String [])
.Split(new[] { "Test Test" }, StringSplitOptions.None)

5

您可以使用String.Replace()将要拆分的字符串替换为在字符串中不存在的字符,然后使用该字符上的String.Split来拆分结果字符串,以达到相同的效果。


4

这里有一个扩展函数,可以使用字符串分隔符进行拆分:

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]");

0
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

0
你可以像这样做:
string splitter = "is"; 
string[] array = "This is a sentence".Split(new string[] { splitter }, StringSplitOptions.None);

通常情况下并非如此,我们应该使用分隔符并对它们进行循环处理。
string phrase = "This is a sentence";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

欲了解更多信息,请访问微软关于 String.Split 的网站。

https://learn.microsoft.com/en-us/dotnet/csharp/how-to/parse-strings-using-split


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接