C# разделить строку другой строкой

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

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

THExxQUICKxxBROWNxxFOX

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

БЫСТРО, КОРИЧНЕВЫЙ, ЛИС

11 ответов

Решение

Чтобы разделить строку, вам нужно использовать перегрузку массива строк.

string data = "THExxQUICKxxBROWNxxFOX";

return data.Split(new string[] { "xx" }, StringSplitOptions.None);

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

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

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

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

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

Regex.Split(string,"xx")

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

using System.Text.RegularExpressions;

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

Для этого есть перегрузка String.Split:

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

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

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#.

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

Начиная с.NET Core 2.0, есть переопределение, которое принимает строку.

Так что теперь вы можете сделать "THExxQUICKxxBROWNxxFOX".Split("xx"),

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

Все ответы выше верны. Я делаю еще один шаг и заставляю C# работать, определяя метод расширения для String:

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");
string data = "THExxQUICKxxBROWNxxFOX";

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

Просто тщательно выберите заменяющий символ (выберите тот, который вряд ли уже присутствует в строке)!

Сначала создайте эту функцию.

      string[] xSplit(string str, string sep) {
    return str.Split(new [] {sep}, StringSplitOptions.None);
}

Тогда используйте это так.

      xSplit("THExxQUICKxxBROWNxxFOX", "xx");

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

string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

Самый простой способ - это использовать String.Replace:

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

Или проще:

string myString = "THExxQUICKxxBROWNxxFOX".Replace("xx", ", ");
Другие вопросы по тегам