Алгоритм "spacify" строк CamelCased - PullRequest
3 голосов
/ 27 января 2009

Довольно просто, мне просто любопытно, как другие могут реализовать этот алгоритм, и хотел бы посмотреть, есть ли какие-нибудь хитрые приемы для оптимизации алгоритма ... Мне просто нужно было реализовать это для проекта, над которым я работаю.

Учитывая строку в CamelCase, как бы вы ее "spacification"?

например. учитывая FooBarGork Я хочу Foo Bar Gork назад.

Вот мой алгоритм в C #:


static void Main(string[] args)
{
    Console.WriteLine(UnCamelCase("FooBarGork"));
}
public static string UnCamelCase(string str)
{
    StringBuilder sb = new StringBuilder();
    for (int i =  0; i < str.Length; i++)
    {
        if (char.IsUpper(str, i) && i > 0) sb.Append(" ");
        sb.Append(str[i]);
    }
    return sb.ToString();
}

Поскольку вам приходится посещать каждого персонажа по одному разу, я считаю, что лучшим вариантом является O (n). Как бы вы это реализовали?

Ответы [ 13 ]

0 голосов
/ 27 января 2009

Я бы пошел с ...

public static string UnCamelCase(string str) {
    Regex reg = new Regex("([A-Z])");

    return reg.Replace(str, " $1").Trim();
}
0 голосов
/ 27 января 2009

Вероятно, я бы сделал это аналогичным образом, просто вместо строкового компоновщика:

str=str.replace(str[i], " "+str[i]);

Я уверен, что ваш путь в конечном итоге будет более эффективным.

0 голосов
/ 27 января 2009

Глядя на ваш код, кажется, что он каким-то образом поврежден (возможно, когда вы его скопировали). Помимо исправления цикла for, я предполагаю, что вы просто пропускаете оператор if с вызовом char.IsUpper вокруг бита sb.Append(" "). В остальном все нормально конечно. Вы не получите ничего лучше, чем O (n) для общей строки.

Теперь, очевидно, существует вызов замены RegEx из одной строки, чтобы выполнить это, но на самом деле нет причин делать такие вещи для такой простой задачи. Всегда лучше избегать RegEx, когда вы можете для удобства чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...