myString = myString.Replace(System.Environment.NewLine,"replacement text");//add a line terminating ;
Как упоминалось в других статьях, если строка поступает из другой среды (ОС), вам необходимо заменить эту конкретную среду реализацией новых символов управления строкой .
Сначала это не сработало для меня. После некоторых исследований я нашел решение: мне пришлось использовать «с помощью системы»; или «System.Environment.NewLine»
Смолла
12
Не удаляются все символы новой строки. Попробуйте эту строку "\ n \ r \ nМое сообщение \ r \ n \ n \ r \ n это. \ N \ n \ r \ n"
Шакти Пракаш Сингх
13
В общем, мне нравится это решение. Тем не менее, обратите внимание, что даже в одной и той же ОС реальные переводы строк могут не совпадать. Это случилось со мной, почему обработка вернула SQL. Новые строки были \ n, а Environment.NewLine - \ r \ n. В результате ничего не было найдено, поэтому новые строки остались.
Доно
@Dono> откуда берутся данные SQL? Вероятно, из внешнего источника, имеющего дело с новыми строками в стиле UNIX. Это проблема с форматом данных, а не с ОС или этим методом ...
Лоран С.
Это должен быть один из статических методов класса String. Сам .NET должен уметь определять формат разрывов строк в исходной строке и преобразовывать его в формат Environment.NewLine \ r \ n ...
Дин Куга,
442
Решения, опубликованные до сих пор, либо только заменяют, Environment.NewLineлибо терпят неудачу, если строка замены содержит разрывы строк, потому что они вызываютstring.Replace несколько раз.
Вот решение, которое использует регулярное выражение для выполнения всех трех замен всего за один проход по строке. Это означает, что строка замены может безопасно содержать разрывы строк.
string result =Regex.Replace(input,@"\r\n?|\n", replacementString);
Таким образом, ваше высказывание, выполняющее Regex.Replace (input, @ "[\ r \ n] +", replaceString), не решит ту же задачу?
флейм
7
@flamebaud Нет, это приведет к другому результату, если в строке будет несколько разрывов строк. «\ r \ n? | \ n» будет заменять каждый разрыв строки, в то время как «[\ r \ n] +» будет делать одну замену для любого количества разрывов строки.
Дэвид Хаммонд
Для тех, кто переживает из-за нескольких разрывов строк: / (\ r \ n? | \ N) / gm
BobbyA
4
Это действительно правильное решение, если вы хотите удалить разрыв строки в строке, которая может быть из разных ОС. Хорошим примером является форматирование JSON. +1
Бастьен Вандам
1
Если дословная строка (префикс @) не используется, то вам нужно иметь две обратные косые черты в строке везде, где она используется, поэтому ответ @mark_byers выше по-прежнему правильный. Префикс @ позволяет сделать так, чтобы обратный слеш был частью строки, которая должна быть в Regex, чтобы использовать его в качестве escape-символа.
Кирк Лимон
173
Чтобы расширить ответ The.Anyi.9, вы также должны знать о различных типах разрыва строки в общем использовании . В зависимости от того, где был создан ваш файл, вы можете посмотреть, чтобы убедиться, что вы нашли все альтернативы ...
@ShawnDotey не нужно, мы хотим заменить управляющие символы, а не последовательности обратной косой черты и буквы.
Н. Кудрявцев
38
Я бы использовал Environment.Newline, когда я хотел вставить новую строку для строки, но не для удаления всех новых строк из строки.
В зависимости от вашей платформы вы можете использовать разные типы новых строк, но даже внутри одной и той же платформы часто используются разные типы новых строк. Особенно при работе с форматами файлов и протоколами.
Это единственное, что сработало для меня, когда я хотел свернуть извлеченный код веб-страницы в одну строку (для упрощения шаблонов регулярных выражений).
Лапа Бальцерсен
Полностью согласен с Брайаном Р. Бонди. Решение, предложенное Корином и получившее столько голосов, по крайней мере очень наивно.
Califf
18
Если ваш код должен работать в разных средах, я бы подумал об использовании Environment.NewLineконстанты, поскольку именно она newlineиспользуется в конкретной среде.
line = line.Replace(Environment.NewLine,"newLineReplacement");
Однако, если вы получаете текст из файла, созданного в другой системе, это может быть неправильным ответом, и вам следует заменить его любой константой новой строки, используемой в другой системе. Обычно это будет \nили \r\n.
Вам необходимо переназначить его обратно в исходную переменную, поскольку замена не происходит на месте.
tvanfosson
@driss Я хотел бы знать, как бы вы выбрали правильную новую константу строки, если вы не знаете, из какой системы пришел файл ... Это решение действительно кажется УНИВЕРСАЛЬНЫМ.
Califf
14
Не забывайте, что замена не выполняет замену в строке, но возвращает новую строку с замененными символами. Следующее удалит разрывы строк (не заменит их). Я бы использовал метод @Brian R. Bondy, если бы заменил их чем-то другим, возможно, в качестве метода расширения. Не забудьте проверить наличие нулевых значений, прежде чем вызывать Replace или предоставленные методы расширения.
string line =...
line = line.Replace("\r","").Replace("\n","");
не может быть ''в C # - нет такого понятия, как пустой символ. будет '\0'работать вместо?
Шевек
1
@Shevek - просто использовал неправильные кавычки. Должно быть, в тот день, когда я ответил на это, я сделал довольно много javascript.
tvanfosson
@ Калифф - это эквивалентно, а не лучше.
tvanfosson
2
ошибка, которую вы сделали здесь, просто доказывает, что это лучше. Большинство компаний, в которых я работал, имеют свой стандарт кодирования - НЕ ИСПОЛЬЗУЙТЕ ЖЕСТКОДОЧЕННЫЕ ЛИТЕРАЛЫ.
Califf
2
@ Калифф "ошибка", которую я сделал, не была бы сделана в IDE с Intellisense и не была бы скомпилирована. Если вы чувствуете, что string.Emptyлучше, во что бы то ни стало используйте его.
tvanfosson
10
Чтобы убедиться, что все возможные способы переноса строк (Windows, Mac и Unix) заменены, вы должны использовать:
yourString.Replace("\r\n","\n")//handling windows linebreaks.Replace("\r","\n")//handling mac linebreaks
это должно привести к строке только с \ n (например, перевод строки) в качестве переноса строки. этот код также полезен для исправления смешанных разрывов строк.
Как новая строка может быть разделена \n, \rи \r\n, сначала мы заменим \rи \r\nс\n , и только потом разделим строку данных.
Следующие строки должны идти в parseCSVметод:
function parseCSV(data){//alert(data);//replace UNIX new lines
data = data.replace(/\r\n/g,"\n");//replace MAC new lines
data = data.replace(/\r/g,"\n");//split into rowsvar rows = data.split("\n");}
Другой вариант заключается в создании StringReaderповерх рассматриваемой строки. На ридере делай .ReadLine()в цикле. Тогда у вас есть разделенные линии, независимо от того, какие (последовательные или непоследовательные) разделители у них были. С этим вы можете действовать как хотите; одна возможность состоит в том, чтобы использовать StringBuilderи вызвать.AppendLine его.
Преимущество состоит в том, что вы позволяете платформе решать, что представляет собой «разрыв строки».
var input =@"sdfhlu \r\n sdkuidfs\r\ndfgdgfd";var match =@"[\\ ]+";var replaceWith =" ";Console.WriteLine("input: "+ input);var x =Regex.Replace(input.Replace(@"\n", replaceWith).Replace(@"\r", replaceWith), match, replaceWith);Console.WriteLine("output: "+ x);
Если вы хотите заменить символы новой строки, табуляции и пробелов:
var input =@"sdfhlusdkuidfs\r\ndfgdgfd";var match =@"[\\s]+";var replaceWith ="";Console.WriteLine("input: "+ input);var x =Regex.Replace(input, match, replaceWith);Console.WriteLine("output: "+ x);
Ответы:
Используйте заменить на
Environment.NewLine
Как упоминалось в других статьях, если строка поступает из другой среды (ОС), вам необходимо заменить эту конкретную среду реализацией новых символов управления строкой .
источник
Решения, опубликованные до сих пор, либо только заменяют,
Environment.NewLine
либо терпят неудачу, если строка замены содержит разрывы строк, потому что они вызываютstring.Replace
несколько раз.Вот решение, которое использует регулярное выражение для выполнения всех трех замен всего за один проход по строке. Это означает, что строка замены может безопасно содержать разрывы строк.
источник
Чтобы расширить ответ The.Anyi.9, вы также должны знать о различных типах разрыва строки в общем использовании . В зависимости от того, где был создан ваш файл, вы можете посмотреть, чтобы убедиться, что вы нашли все альтернативы ...
должен заставить вас идти ...
источник
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);
достаточно?\r\n
вы получите строку замены дважды - не идеально.Я бы использовал Environment.Newline, когда я хотел вставить новую строку для строки, но не для удаления всех новых строк из строки.
В зависимости от вашей платформы вы можете использовать разные типы новых строк, но даже внутри одной и той же платформы часто используются разные типы новых строк. Особенно при работе с форматами файлов и протоколами.
источник
Если ваш код должен работать в разных средах, я бы подумал об использовании
Environment.NewLine
константы, поскольку именно онаnewline
используется в конкретной среде.Однако, если вы получаете текст из файла, созданного в другой системе, это может быть неправильным ответом, и вам следует заменить его любой константой новой строки, используемой в другой системе. Обычно это будет
\n
или\r\n
.источник
Не забывайте, что замена не выполняет замену в строке, но возвращает новую строку с замененными символами. Следующее удалит разрывы строк (не заменит их). Я бы использовал метод @Brian R. Bondy, если бы заменил их чем-то другим, возможно, в качестве метода расширения. Не забудьте проверить наличие нулевых значений, прежде чем вызывать Replace или предоставленные методы расширения.
Как методы расширения:
источник
''
в C # - нет такого понятия, как пустой символ. будет'\0'
работать вместо?string.Empty
лучше, во что бы то ни стало используйте его.Чтобы убедиться, что все возможные способы переноса строк (Windows, Mac и Unix) заменены, вы должны использовать:
и в этом порядке, чтобы не делать дополнительных разрывов строк, когда вы найдете некоторую комбинацию символов окончания строки.
источник
если вы хотите «очистить» новые строки, лучше всего использовать комментарий с пламенной скоростью с использованием регулярных выражений
@"[\r\n]+"
.источник
Мне нужно было заменить на
\r\n
фактический возврат каретки и перевод строки и заменить\t
на фактическую вкладку. Итак, я придумал следующее:источник
Почему не оба?
Примечание. Замените
strin
на имя вашей входной строки.источник
источник
Используйте метод .Replace ()
источник
Лучший способ безопасно заменить разрывы строк
это должно привести к строке только с \ n (например, перевод строки) в качестве переноса строки. этот код также полезен для исправления смешанных разрывов строк.
источник
Как новая строка может быть разделена
\n
,\r
и\r\n
, сначала мы заменим\r
и\r\n
с\n
, и только потом разделим строку данных.Следующие строки должны идти в
parseCSV
метод:источник
или
в зависимости от того, куда вы хотите идти.
Надеется, что это помогает.
источник
Другой вариант заключается в создании
StringReader
поверх рассматриваемой строки. На ридере делай.ReadLine()
в цикле. Тогда у вас есть разделенные линии, независимо от того, какие (последовательные или непоследовательные) разделители у них были. С этим вы можете действовать как хотите; одна возможность состоит в том, чтобы использоватьStringBuilder
и вызвать.AppendLine
его.Преимущество состоит в том, что вы позволяете платформе решать, что представляет собой «разрыв строки».
источник
Если вы хотите заменить только новые строки:
Если вы хотите заменить символы новой строки, табуляции и пробелов:
источник