Разделение строки на другую строку в C#

Я использовал метод Split() для разделения строк, но он работает только в том случае, если вы разделяете строку по символу. Есть ли способ разделить строку, при этом параметром разделения по символу будет другая строка?

Я пробовал преобразовать разделитель в символьный массив, но безуспешно.

Другими словами, я хотел бы разделить строку:

THExxQUICKxxBROWNxxFOX

на xx, и вернуть массив со значениями:

THE, QUICK, BROWN, FOX

Комментарии к вопросу (1)
Решение

Для разделения по строке вам придется использовать перегрузку string array overload.

string data = "THExxQUICKxxBROWNxxFOX";

return data.Split(new string[] { "xx" }, StringSplitOptions.None);
Комментарии (14)

Существует перегрузка Split, которая принимает строки.

"THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None);

Вы можете использовать любой из этих вариантов StringSplitOptions

  • None - Возвращаемое значение включает массив элементы, содержащие пустую строку
  • Удалить пустые записи - Возвращаемое значение не включает элементы массива, которые содержат пустую строку

Так, если строка имеет вид "THExxQUICKxxxxxxBROWNxxFOX", StringSplitOptions.None вернет пустую запись в массив для части "xxxx", а StringSplitOptions.RemoveEmptyEntries - нет.

Комментарии (0)
Regex.Split(string, "xx")

вот как я обычно это делаю. Конечно, вам понадобится

using System.Text.RegularExpressions;

но, опять же, мне эта библиотека нужна постоянно.

Комментарии (3)

Там'с перегрузки строка.Сплит для этого:

"THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None);
Комментарии (1)

Я вообще люблю использовать мои собственные расширения для этого:

string data = "THExxQUICKxxBROWNxxFOX";
var dataspt = data.Split("xx");
//>THE  QUICK  BROWN  FOX 

//the extension class must be declared as static
public static class StringExtension
{   
    public static string[] Split(this string str, string splitter)
    {
        return str.Split(new[] { splitter }, StringSplitOptions.None);
    }
}

Однако это приведет к исключение, если Microsoft решит включают этот метод-перегрузка в более поздних версиях. Это тоже вероятная причина, почему Microsoft не включила этот метод в то же время: по крайней мере, одной компании я работал, использовали такие расширения во всех своих проектах c#.

Он также может быть возможным условно определить метод во время выполнения, если это не'т существуют.

Комментарии (1)

В предыдущих ответах все правильно. Я пошел на один шаг дальше и сделать c# работа для меня определение метод расширения на строку:

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

Таким образом, я могу позвонить на любой строке в простой способ, я наивно ожидал, в первый раз я пытался сделать это:

"a big long string with stuff to split on".Split("g str");
Комментарии (0)
string data = "THExxQUICKxxBROWNxxFOX";

return data.Replace("xx","|").Split('|');

Просто внимательно выбирайте заменить символ (выбрать одно, что это'т скорее всего, будет присутствовать в уже строку)!

Комментарии (7)

Как из .Чистая ядра 2.0, есть исключение, которое принимает строку.

Так что теперь вы можете сделать я THExxQUICKxxBROWNxxFOX&quot и;.Сплит (на"ХХ" - а).

См https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netcore-2.0#System_String_Split_System_String_System_StringSplitOptions_

Комментарии (0)

Это тоже легко:

string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
Комментарии (2)

Самый простой способ-это использовать строку.Заменить:

string myString = "THExxQUICKxxBROWNxxFOX";
mystring = mystring.Replace("xx", ", ");

Или более просто:

string myString = "THExxQUICKxxBROWNxxFOX".Replace("xx", ", ");
Комментарии (2)