2013-12-11 5 views
1

Есть ли лучший способ отформатировать эту строку?Есть ли лучший способ отформатировать эту строку?

var Mac = sdr.GetString(0); 
string trimMac = Mac.Replace("-", ""); 
string formatMac = trimMac.Insert(4, "."); 
string formatAgain = formatMac.Insert(9, "."); 
string dudeWTF = formatAgain.Trim(); 

Я потянув MAC-адрес от базы данных, а затем отформатировать их XX-XX-XX-XX-XX-XX в XXXX.XXXX.XXXX тогда я использую StreamWriter, чтобы записать их в файл , sdr - SqlDataReader.

+4

Какой вход и ожидаемый выход? –

+0

Какова ваша цель отформатировать его? и какова ваша ожидаемая строка ввода и вывода? – azisfatoni

+0

По крайней мере, это, вероятно, неразумно для 'Trim()' в начале. Если обрезка заключается в удалении избыточного пробела с пользовательского ввода, вы меняете место, где два символа '.' заканчиваются для эквивалентного ввода. –

ответ

1
string dudeWTF = Mac.Replace("-", "").Insert(4, ".").Insert(9, ".").Trim(); 
+0

На основании ограниченной информации, указанной в вашем вопросе. –

6

Начиная со строки, как: String mac="XX-XX-XX-XX-XX-XX";

Тогда мы можем просто сделать:

String dudeWTF = String.Format("{0}{1}.{2}{3}.{4}{5}", mac.Split('-'));

+0

Это новый способ выполнения операции. Мне нравится, как он объединяет результаты разделения в параметр params string.Format. Красиво сделано. –

+0

@ToddBowles: Спасибо. Как ни странно, я не знал, что вы можете сделать это с помощью массивов, пока я не попробовал его при оптимизации немного до публикации. – NotMe

0

Почему-то простое, когда вы можете использовать ...

РЕГУЛЯРНОЕ ЭКСПРЕССИЯ

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.

Я отправляю этот ответ, потому что в какой-то момент кто-то подумает «почему бы не регулярное выражение!» (как и я), и потому, что я слишком долго занимался этим. Может быть, кто-то найдет это полезным.

Смежные вопросы