Как разделить строку многосимвольным разделителем в C #? - PullRequest
224 голосов
/ 14 июля 2009

Что, если я хочу разделить строку, используя разделитель, который является словом?

Например, This is a sentence.

Я хочу разделить на is и получить This и a sentence.

В Java я могу отправить строку в качестве разделителя, но как мне сделать это в C#?

Ответы [ 10 ]

275 голосов
/ 14 июля 2009

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);
}
54 голосов
/ 14 июля 2009

Вы можете использовать метод 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 также будет разбит на " is " в конце слова "This", поэтому я и использовал метод Regex и включает в себя слово границы вокруг " is ". Обратите внимание, однако, что если вы только что написали этот пример по ошибке, то String.Split , вероятно, будет достаточно.

33 голосов
/ 16 ноября 2011

Исходя из существующих ответов на этот пост, это упрощает реализацию:)

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


    }
}
28 голосов
/ 14 июля 2009
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 голосов
/ 24 июля 2014

... Короче говоря:

string[] arr = "This is a sentence".Split(new string[] { "is" }, StringSplitOptions.None);
5 голосов
/ 14 июля 2009

Вы можете использовать String.Replace (), чтобы заменить желаемую строку разделения символом, которого нет в строке, а затем использовать String.Split для этого символа, чтобы разделить результирующую строку для того же эффекта.

4 голосов
/ 07 июня 2015

Или используйте этот код; (то же самое: новая строка [])

.Split(new[] { "Test Test" }, StringSplitOptions.None)
2 голосов
/ 29 апреля 2018

Вот функция расширения для разделения с помощью строкового разделителя:

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 голосов
/ 20 октября 2014
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 голосов
/ 18 августа 2011
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));
...