Есть строка, в которой нужно заменить все идентификаторы вида
SomeIdentifier
на идентификаторы вида
some_identifier
Готовое решение (работает правильно):
string GetUnderScore(string source)
{
string target = "";
foreach (char c in source)
{
if (char.IsUpper(c))
{
target += "_" + char.ToLower(c);
}
else
{
target += c;
}
}
if (target[0] == '_')
{
target = target.Substring(1);
}
return target;
}
но уж как-то много кода для такой простой задачи. Как упростить?
Ответ
Можно избавиться от else и второго if и если строки длинные, то лучше использовать StringBuilder вместо string, т.к. StringBuilder не создаёт новую строку с копированием символов из предыдущей при каждом добавлении наших char :) string GetUnderScore(string source) { var result = new StringBuilder(source); foreach (char c in source) { if (char.IsUpper(c) && result.Length > 0) result.Append("_"); result.Append(char.ToLower(c)); } return result.ToString(); }
Комментариев нет:
Отправить комментарий