Си диез / Говнокод #2055 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
public string removeSpecialCharacters(string orig) {
            string rv;

            rv = orig.Replace("\\", " ");
            rv = rv.Replace("(", " ");
            rv = rv.Replace(")", " ");
            rv = rv.Replace("/", " ");
            rv = rv.Replace("-", " ");
            rv = rv.Replace(",", " ");
            rv = rv.Replace(">", " ");
            rv = rv.Replace("<", " ");
            rv = rv.Replace("-", " ");
            rv = rv.Replace("&", " ");

            rv = rv.Replace("'", "");

            rv = rv.Replace("\u2019", ""); // smart forward (possessive) quote.

            rv = rv.Replace(" ", "");

            rv = rv.Trim(' '); // Remove leading and trailing spaces.

            return (rv);
        }

Запостил: fade fade, (Updated )

Комментарии (19) RSS

    • http://msdn.microsoft.com/ru-ru/library/fk49wtc1.aspx
      "Примечание: Данный метод не изменяет значение текущего экземпляра. Вместо этого возвращается новая строка, в которой все вхождения oldValue заменяются на newValue."

      В этом говнокоде создается как минимум 14 (!!) копий исходной строки. И если вызывать его для большого текста или для большого листа строк - перфоманс приложения (асп.нет страницы) сделает торжественное сеппуку.
      Ответить
      • А разве сборщик мусора не будет автоматически удалять старую копию при присвоении новой на то же место? Памяти конечно хватит, но да, с быстродействием тут конечно ахтунг полный 😀
        Ответить
        • Сборщик мусора вызывается, скажем..., когда сам захочет. И работы ему сразу будет много - за это время память можно изрядно подзасрать. Если это веб -приложение (а это как раз-таки оно :), то память - дорогое удовольствие. Сервер ведь может быть и перегружен. Ну и к быстродействию - выделение памяти под кучу объектов увеличит время работы метода. А значит увеличит общее время загрузки страницы.
          Вобщем ахтункъ, да хД
          Ответить
          • Не надо заниматься преждевременной оптимизацией.
            Код читается и всем понятно что он делает.
            В остальном коде наверняка есть более "узкие" места - их и надо доводить до приемлимой производительности. Профайлер в руки и вперед.
            Ответить
            • >Не надо заниматься преждевременной оптимизацией.

              Да, не надо.
              Надо изначально писать нормальный код.
              StringBuilder как раз для таких целей предназначен, и его использование никак не ухудшает производительность труда или читаемость.
              Про регэкспы уже молчу.
              Ответить
              • При этом заменять пробелом, чтобы его потом удалить...
                Ответить
  • можно сделать еще говеннее
    return orig.Replace("\\", " ")..Replace("(", " ").Replace(")", " ").Replace("/", " ").Replace("-", " ") .......
    Ответить
    • Не, это не говёнее, потому что читабельность увеличивает (краткость-сестра-таланта).
      Ответить
  • а как сделать "правильно"? и что б быстро работало?
    вариант с регексом не предлагать, так как медленный.
    Ответить
    • Использовать StringBuilder и в нем производить операции
      Ответить
  • >rv = rv.Replace(" ", "");
    >rv = rv.Trim(' '); // чтобы наверняка
    Ответить
  • кстати пора уже ввести отрывание яиц рук за использование козлиной верблюжьей нотации там где не надо!
    Ответить
  • pro stringBuilder vse uje govorili...

    a ne cajetsea sto
    rv = rv.Replace("(", " ");
    .....................
    rv = rv.Replace(" ", "");
    ==
    rv = rv.Replace("(", ""); ???

    a ecio lu4e rv = rv.Replace("(", string.Empt);
    Ответить
  • И это вместо однократного создания стрингбилдера и одного прохода по строке на основе синглтона-хэшсета с "плохими" символами...
    Ужас.
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8