Как устранить ВСЕ разрывы строк в строке? - PullRequest
42 голосов
/ 19 июля 2011

Мне нужно избавиться от всех разрывов строк, которые появляются в моих строках (исходя из БД). Я делаю это, используя код ниже:

value.Replace("\r\n", "").Replace("\n", "").Replace("\r", "")

Я вижу, что как минимум один персонаж, действующий как конец строки, выжил. Код символа: 8232 .

Это очень глупо с моей стороны, но я должен сказать, что это первый раз, когда я с удовольствием вижу этого персонажа. Очевидно, что я могу просто заменить этот символ напрямую, но я думал о расширении моего текущего подхода (основанного на замене комбинаций "\ r" и "\ n") на что-то гораздо более надежное, поэтому он будет включать не только ' 8232 'char, но также и все остальные, пока не найденные мной.

Есть ли у вас пуленепробиваемый подход к такой проблеме?

EDIT # 1:

Мне кажется, что есть несколько возможных решений:

  1. использовать Regex.Replace
  2. удалить все символы, если это IsSeparator или IsControl
  3. заменить на "", если это IsWhiteSpace
  4. создайте список всех возможных окончаний строки ("\ r \ n", "\ r", "\ n", LF, VT, FF, CR, CR + LF, NEL, LS, PS) и просто замените их с пустой строкой. Это много замен.

Я бы сказал, что лучшие результаты будут после применения 1-го и 4-го подходов, но я не могу решить, что будет быстрее. Какой из них вы считаете наиболее полным?

EDIT # 2

Я разместил ответ ниже.

Ответы [ 12 ]

0 голосов
/ 20 июля 2011

лично я бы пошел с

    public static String RemoveLineEndings(this String text)
    {
        StringBuilder newText = new StringBuilder();
        for (int i = 0; i < text.Length; i++)
        {
            if (!char.IsControl(text, i))
                newText.Append(text[i]);
        }
        return newText.ToString();
    }
0 голосов
/ 19 июля 2011

Предполагая, что 8232 является Unicode, вы можете сделать это:

value.Replace("\u2028", string.Empty);
...