Разделить строку на другую строку в C # - PullRequest
598 голосов
/ 11 февраля 2010

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

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

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

THExxQUICKxxBROWNxxFOX

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

THE, QUICK, BROWN, FOX

Ответы [ 10 ]

1086 голосов
/ 11 февраля 2010

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

string data = "THExxQUICKxxBROWNxxFOX";

return data.Split(new string[] { "xx" }, StringSplitOptions.None);
105 голосов
/ 11 февраля 2010

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

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

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

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

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

60 голосов
/ 11 февраля 2010
Regex.Split(string, "xx")

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

using System.Text.RegularExpressions;

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

42 голосов
/ 11 февраля 2010

Существует перегрузка String.Split для этого:

"THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None);
21 голосов
/ 26 сентября 2013

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

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

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

7 голосов
/ 30 января 2016

Все предыдущие ответы верны. Я делаю еще один шаг и заставляю 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");
6 голосов
/ 05 июля 2014
string data = "THExxQUICKxxBROWNxxFOX";

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

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

1 голос
/ 21 сентября 2018

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

string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
0 голосов
/ 24 мая 2019

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

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

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

0 голосов
/ 26 марта 2014

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

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

Или проще:

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