Как заменить строки в строке на С#?
Используйте замену с помощью Environment.NewLine
myString = myString.Replace(System.Environment.NewLine, "replacement text")
Как упоминалось в других сообщениях, если строка поступает из другой среды (ОС), тогда вам нужно будет заменить реализацию конкретных сред новых символов управления строкой.
Решения, опубликованные до сих пор, либо заменяют только Environment.NewLine
, либо они терпят неудачу, если строка замены содержит разрывы строк, поскольку они вызывают string.Replace
несколько раз.
Здесь решение, которое использует регулярное выражение, чтобы сделать все три замены всего за один проход по строке. Это означает, что строка замены может безопасно содержать разрывы строк.
string result = Regex.Replace(input, @"\r\n?|\n", replacementString);
Чтобы расширить ответ The.Anyi.9, вы также должны знать различные типы разрывов строк в общем использовании. В зависимости от того, где был создан ваш файл, вы можете захотеть убедиться, что вы поймаете все альтернативы...
string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
должен вас поймать...
Я бы использовал Environment.Newline, когда мне захотелось вставить новую строку для строки, но не удалять все строки новой строки из строки.
В зависимости от вашей платформы у вас могут быть разные типы новых строк, но даже внутри одной и той же платформы используются разные типы новых строк. В частности, когда речь идет о форматах файлов и протоколах.
string ReplaceNewlines(string blockOfText, string replaceWith)
{
return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}
Если ваш код должен работать в разных средах, я бы подумал об использовании константы Environment.NewLine
, так как это специально newline
, используемый в конкретной среде.
line = line.Replace(Environment.NewLine, "newLineReplacement");
Однако, если вы получите текст из файла, происходящего из другой системы, это может быть не правильный ответ, и вы должны заменить любой константой новой строки, используемой в другой системе. Обычно это будет \n
или \r\n
.
Не забывайте, что замена не выполняет замену в строке, но возвращает новую строку с замененными символами. Ниже будут удалены разрывы строк (не заменяются). Я бы использовал метод @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 );
}
}
''
в C # - нет такого понятия, как пустой символ. вместо этого будет работать '\0'
?
Чтобы все возможные варианты разрывов строк (Windows, Mac и Unix) были заменены, вы должны использовать:
string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');
и в этом порядке, чтобы не делать лишние разрывы строк, когда вы находите какую-то комбинацию символов окончания строки.
Мне нужно было заменить \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;
}
Почему не оба?
string ReplacementString = "";
Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);
Примечание. Замените strin
на имя вашей входной строки.
var answer = Regex.Replace(value, "(\n|\r)+", replacementString);
Лучший способ заменить линейные атаки безопасно -
yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n") //handling mac linebreaks
который должен создать строку с только \n (например, linefeed) в качестве строк. этот код полезен для исправления смешанных строк.
Использовать метод .Replace()
Line.Replace("\n", "whatever you want to replace with");
Поскольку новая строка может быть разделена символами \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");
}
string s = Regex.Replace(source_string, "\n", "\r\n");
или
string s = Regex.Replace(source_string, "\r\n", "\n");
в зависимости от того, каким способом вы хотите перейти.
Надеется, что это поможет.