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