Вы даже можете решить эту проблему с однострочника (хотя немного некрасиво):
String.Join(String.Empty, input.Split('-').Select(q => (q.Length == 0 ? String.Empty : (q.Length > 1 ? (q.First() + q.Last()).ToString() : q.First().ToString())))).Substring(((input[0] + input[1]).ToString().Contains('-') ? 0 : 1), input.Length - ((input[0] + input[1]).ToString().Contains('-') ? 0 : 1) - ((input[input.Length - 1] + input[input.Length - 2]).ToString().Contains('-') ? 0 : 1));
сначала разбивает строку на массив на каждом '-'
, то он присоединяет только первый и последний символ каждой строки (или только единственный символ, если есть только один, и он оставляет тыс пустая строка, если там ничего нет), а затем она объединяет результирующее перечислимое значение в String. Наконец, мы снимаем первую и последнюю буквы, если они не находятся в нужном диапазоне.
Я знаю, что это некрасиво, я просто говорю, что это возможно ..
Вероятно, это лучше всего использовать простой
new Regex(@"\w(?=-)|(?<=-)\w", RegexOptions.Compiled)
, а затем работать с этим ..
EDIT @Kirill Полищука был быстрее .. его решение должно работать ..
EDIT 2
После того, как вопрос был обновлен, вот фрагмент кода, который должен сделать трюк:
string input = "A-B-C";
string s2;
string s3 = "";
string s4 = "";
var splitted = input.Split('-');
foreach(string s in splitted) {
if (s.Length == 0)
s2 = String.Empty;
else
if (s.Length > 1)
s2 = (s.First() + s.Last()).ToString();
else
s2 = s.First().ToString();
s3 += s4 + s2;
s4 = " and ";
}
int beginning;
int end;
if (input.Length > 1)
{
if ((input[0] + input[1]).ToString().Contains('-'))
beginning = 0;
else
beginning = 1;
if ((input[input.Length - 1] + input[input.Length - 2]).ToString().Contains('-'))
end = 0;
else
end = 1;
}
else
{
if ((input[0]).ToString().Contains('-'))
beginning = 0;
else
beginning = 1;
if ((input[input.Length - 1]).ToString().Contains('-'))
end = 0;
else
end = 1;
}
string result = s3.Substring(beginning, s3.Length - beginning - end);
Это не очень элегантно, но он должен работать (не тестировался, хотя ..). он работает почти так же, как однострочный выше ...
регулярные выражения являются ответом здесь ([AZ]) - ([AZ]) – Tom
Как я могу использовать его в функциях манипуляции с строкой C#, вы бы уточнили больше @Tom – Devjosh
Итак, что вы хотите 'ABC-DE'? производить? 'CD' и' DE'? Это путает – Aliostad