Почему-то простое, когда вы можете использовать ...
РЕГУЛЯРНОЕ ЭКСПРЕССИЯ
private static readonly string _InnerPattern = "([a-zA-Z0-9]{2})";
private static readonly string _Pattern = string.Format("{0}-{0}-{0}-{0}-{0}-{0}", _InnerPattern);
private static readonly string _ReplacePattern = "$1$2.$3$4.$5$6";
private static readonly Regex _TransformRegex = new Regex(_Pattern, RegexOptions.Compiled);
public static string TransformMacAddressUsingRegex(string input)
{
return _TransformRegex.Replace(input, _ReplacePattern);
}
Вышеприведенное выражение создает группу захвата для каждого набора символов, разделенных дефисом «-», а затем строит выходную строку, используя содержимое этих групп захвата.
Теперь для плохих новостей его почти в 5 раз медленнее, чем первоначально поставляемый код, и ок. в 2,5 раза медленнее, чем решение Роберта Харви, а также значительно сложнее. Это на самом деле улучшение по сравнению с моим первым разрезом, который был раз медленнее, чем исходный код, и раз медленнее, чем решение RobertHarvey.
Сроки измерялись путем многократного преобразования одной и той же строки 1 миллион раз в цикле и времени с System.Diagnostics.Stopwatch
.
Я отправляю этот ответ, потому что в какой-то момент кто-то подумает «почему бы не регулярное выражение!» (как и я), и потому, что я слишком долго занимался этим. Может быть, кто-то найдет это полезным.
Какой вход и ожидаемый выход? –
Какова ваша цель отформатировать его? и какова ваша ожидаемая строка ввода и вывода? – azisfatoni
По крайней мере, это, вероятно, неразумно для 'Trim()' в начале. Если обрезка заключается в удалении избыточного пробела с пользовательского ввода, вы меняете место, где два символа '.' заканчиваются для эквивалентного ввода. –