Привет всем,
Есть задача разбить строку символов на лист строк по определенному правилу.
На входе есть String, на выходе должен быть List<String>. Заморочка в разбиении.
Строка представляет собой набор символов типа:
ABCD###AB###EFDG#GGG##KKKK
где # — некоторый служебный символ. Строку нужно разбить на участки где нет служебного символа, и где есть только служебные символы. То есть в случае с этим примеров разбиение должно быть такое:
ABCD
###
AB
###
EFGD
#
GGG
##
KKKK
Вроде казалось плёвой задачкой, но что-то я голову сломал об неё. Можно конечно какими-то монструозными if-ами её парсить, но есть ощущение, что должен быть способ попроще. Помогите идеями please, а то творческий тупик какой-то
Здравствуйте, Аноним, Вы писали:
А>Привет всем,
А>Есть задача разбить строку символов на лист строк по определенному правилу.
static void Main()
{
String input = "ABCD###AB###EFDG#GGG##KKKK";
int i = 0;
bool current = false;
var output = input
.GroupBy(c =>
{
if (current != IsSpecialChar(c))
{
i++;
current = !current;
}
return i;
})
.Select(String.Concat<Char>)
.ToArray();
}
static bool IsSpecialChar(Char c)
{
return c == '#';
}
регулярками я думаю можно
string input = "ABCD###AB###EFDG#GGG##KKKK";
string pattern = "(?:(#{1,}))";
string[] result = Regex.Split(input, pattern);
List<string> output = new List<string>(result);
Здравствуйте, Аноним, Вы писали:
А>регулярками я думаю можно
А> string[] result = Regex.Split(input, pattern);
А> List<string> output = new List<string>(result);
Неправильно — где в списке разделители?
> Есть задача разбить строку символов на лист строк
Хвосты по информатике штоль?
Задача — тривиальная, почему она вызывает такие вопросы? Да, можно if'ами, можно на конечных автоматах, способов — мильён. Любой из них хорош по-своему, даже этот ужасный LINQ выше
M>Неправильно — где в списке разделители?
а с чего ты взял, что их там нет? прочитай что ли
http://msdn.microsoft.com/en-us/library/ze12yx1d.aspx
M> Хвосты по информатике штоль? Задача — тривиальная, почему она вызывает такие вопросы? Да, можно if'ами, можно на конечных автоматах, способов — мильён. Любой из них хорош по-своему, даже этот ужасный LINQ выше
это к кому вопрос вообще? matumba у Анонимов рядом стоит порядковый номер, по которому можно с некоторой вероятностью их друг от друга отличать. Так, что задавай вопрос топик стартеру.
Здравствуйте, BrainSlug, Вы писали:
M>>Неправильно — где в списке разделители?
BS>а с чего ты взял, что их там нет?
Да, такие "тонкости" я не знал. Кстати, почему такой многосимвольный регэкс? Не достаточно ли будет "(#+)"?
BS>это к кому вопрос вообще?
К топикстартеру. А ты чё взбеленился-то? С утра не дали чтоль?
Из контекста всё понятно, конфликт раздувать незачем. Горячий русский парень....