Заменить разрывы строк в строке С#

Как заменить строки в строке на С#?

Ответ 1

Используйте замену с помощью Environment.NewLine

myString = myString.Replace(System.Environment.NewLine, "replacement text")

Как упоминалось в других сообщениях, если строка поступает из другой среды (ОС), тогда вам нужно будет заменить реализацию конкретных сред новых символов управления строкой.

Ответ 2

Решения, опубликованные до сих пор, либо заменяют только Environment.NewLine, либо они терпят неудачу, если строка замены содержит разрывы строк, поскольку они вызывают string.Replace несколько раз.

Здесь решение, которое использует регулярное выражение, чтобы сделать все три замены всего за один проход по строке. Это означает, что строка замены может безопасно содержать разрывы строк.

string result = Regex.Replace(input, @"\r\n?|\n", replacementString);

Ответ 3

Чтобы расширить ответ The.Anyi.9, вы также должны знать различные типы разрывов строк в общем использовании. В зависимости от того, где был создан ваш файл, вы можете захотеть убедиться, что вы поймаете все альтернативы...

string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);

должен вас поймать...

Ответ 4

Я бы использовал Environment.Newline, когда мне захотелось вставить новую строку для строки, но не удалять все строки новой строки из строки.

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

string ReplaceNewlines(string blockOfText, string replaceWith)
{
    return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}

Ответ 5

Если ваш код должен работать в разных средах, я бы подумал об использовании константы Environment.NewLine, так как это специально newline, используемый в конкретной среде.

line = line.Replace(Environment.NewLine, "newLineReplacement");

Однако, если вы получите текст из файла, происходящего из другой системы, это может быть не правильный ответ, и вы должны заменить любой константой новой строки, используемой в другой системе. Обычно это будет \n или \r\n.

Ответ 6

Не забывайте, что замена не выполняет замену в строке, но возвращает новую строку с замененными символами. Ниже будут удалены разрывы строк (не заменяются). Я бы использовал метод @Brian R. Bondy, заменив их чем-то другим, возможно, обернутым как метод расширения. Не забудьте сначала проверить нулевые значения, прежде чем вызывать Replace или предоставленные методы расширения.

string line = ...

line = line.Replace( "\r", "").Replace( "\n", "" );

В качестве методов расширения:

public static class StringExtensions
{
   public static string RemoveLineBreaks( this string lines )
   {
      return lines.Replace( "\r", "").Replace( "\n", "" );
   }

   public static string ReplaceLineBreaks( this string lines, string replacement )
   {
      return lines.Replace( "\r\n", replacement )
                  .Replace( "\r", replacement )
                  .Replace( "\n", replacement );
   }
}

Ответ 7

Чтобы все возможные варианты разрывов строк (Windows, Mac и Unix) были заменены, вы должны использовать:

string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');

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

Ответ 8

Мне нужно было заменить \r\n фактическим возвратом каретки и подачей строки и заменить \t на фактическую вкладку. Поэтому я придумал следующее:

public string Transform(string data)
{
    string result = data;
    char cr = (char)13;
    char lf = (char)10;
    char tab = (char)9;

    result = result.Replace("\\r", cr.ToString());
    result = result.Replace("\\n", lf.ToString());
    result = result.Replace("\\t", tab.ToString());

    return result;
}

Ответ 9

Почему не оба?

string ReplacementString = "";

Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);

Примечание. Замените strin на имя вашей входной строки.

Ответ 10

var answer = Regex.Replace(value, "(\n|\r)+", replacementString);

Ответ 11

если вы хотите "очистить" новые строки, лучше всего использовать комментарий пламенного бита с помощью regex @"[\r\n]+".

using System;
using System.Text.RegularExpressions;

class MainClass {
  public static void Main (string[] args) {
    string str = "AAA\r\nBBB\r\n\r\n\r\nCCC\r\r\rDDD\n\n\nEEE";

    Console.WriteLine (str.Replace(System.Environment.NewLine, "-"));
    /* Result:
    AAA
    -BBB
    -
    -
    -CCC


    DDD---EEE
    */
    Console.WriteLine (Regex.Replace(str, @"\r\n?|\n", "-"));
    // Result:
    // AAA-BBB---CCC---DDD---EEE

    Console.WriteLine (Regex.Replace(str, @"[\r\n]+", "-"));
    // Result:
    // AAA-BBB-CCC-DDD-EEE
  }
}

Ответ 12

Использовать метод .Replace()

Line.Replace("\n", "whatever you want to replace with");

Ответ 13

Лучший способ заменить линейные атаки безопасно -

yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n")             //handling mac linebreaks

который должен создать строку с только \n (например, linefeed) в качестве строк. этот код полезен для исправления смешанных строк.

Ответ 14

Поскольку новая строка может быть разделена символами \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 rows
    var rows = data.split("\n");
}

Ответ 15

string s = Regex.Replace(source_string, "\n", "\r\n");

или

string s = Regex.Replace(source_string, "\r\n", "\n");

в зависимости от того, каким способом вы хотите перейти.

Надеется, что это поможет.

Ответ 16

Другой вариант - создать StringReader поверх рассматриваемой строки. На считывателе выполните .ReadLine() в цикле. Тогда у вас есть разделенные линии, независимо от того, какие (последовательные или непоследовательные) разделители у них были. С этим вы можете действовать как хотите; одна возможность заключается в том, чтобы использовать StringBuilder и вызвать .AppendLine на него.

Преимущество состоит в том, что вы позволяете фреймворку решать, что представляет собой "разрыв строки".

Ответ 17

Если вы хотите заменить только новые строки:

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);

Ответ 18

s = Regex.Replace(s, @"\s+", string.Empty);