Как разделить строку после того, как некий символ встретился N раз?
Есть строка символов "1111,2222,3333,4444,5555"
Как разделить её после того, как символ "," встретится 3й раз? чтобы получить 1111,2222,3333, и 4444,5555 Как разделить строку после того, как некий символ встретился N раз?
string[] data = `Str.Split`
(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
делит cразу после первого.
Возможно есть какое-то ниндзюцу для Str.Split, чтобы засунуть в параметы маску типа
{","},{any symbols},{","}
обновил описание.
При использовании метода от EvgeniyZ
Str.Split(new[]{','}, 3).
Если его применить так
string str2 = "1111,2222,3333,4444,5555";
string[] data1 = str2.Split(new string[] {","}, 3, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"{data1[0]}, \n {data1[1]}, \n {data1[2]}");
получаем
1111,
2222,
3333,4444,5555
но ожидаемый результат
1111,2222,3333,
4444,5555
Ответы (1 шт):
Метод для получения всех индексов указанного символа (searchstring) в строке:
public static class StrExtention
{
public static IEnumerable<int> AllIndexesOf(this string str, string searchstring)
{
int minIndex = str.IndexOf(searchstring);
while (minIndex != -1)
{
yield return minIndex;
minIndex = str.IndexOf(searchstring, minIndex + searchstring.Length);
}
}
}
Сам алгоритм:
var str = "1111,2222,3333,4444,5555"; //строка
var n = 2;
var needIndex = str.AllIndexesOf(",").ElementAt(n - 1) + 1; //берём индекс 2 запятой
var result = Enumerable.Range(0, 2)
.Select(x => str.Substring(x * needIndex, x == 0 ? needIndex : str.Length - x * needIndex))
.ToList();
P.S. Не знал, как красивее сделать x == 0 ? needIndex : str.Length - x * needIndex этот момент, поэтому решил просто сделать в лоб. Если есть предложения, как это красивее сделать, напишите в комментариях - поправлю
Результаты:

