Как я могу заменить разрывы строк внутри строки в C #?
Как я могу заменить разрывы строк внутри строки в C #?
Ответы:
Используйте заменить на Environment.NewLine
myString = myString.Replace(System.Environment.NewLine, "replacement text"); //add a line terminating ;
Как упоминалось в других статьях, если строка поступает из другой среды (ОС), вам необходимо заменить эту конкретную среду реализацией новых символов управления строкой .
Решения, опубликованные до сих пор, либо только заменяют, 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);
должен заставить вас идти ...
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);
достаточно?
\r\n
вы получите строку замены дважды - не идеально.
Я бы использовал 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'
работать вместо?
string.Empty
лучше, во что бы то ни стало используйте его.
Чтобы убедиться, что все возможные способы переноса строк (Windows, Mac и Unix) заменены, вы должны использовать:
string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');
и в этом порядке, чтобы не делать дополнительных разрывов строк, когда вы найдете некоторую комбинацию символов окончания строки.
если вы хотите «очистить» новые строки, лучше всего использовать комментарий с пламенной скоростью с использованием регулярных выражений @"[\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
}
}
Мне нужно было заменить на \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;
}
var answer = Regex.Replace(value, "(\n|\r)+", replacementString);
Используйте метод .Replace ()
Line.Replace("\n", "whatever you want to replace with");
Лучший способ безопасно заменить разрывы строк
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 rows
var rows = data.split("\n");
}
string s = Regex.Replace(source_string, "\n", "\r\n");
или
string s = Regex.Replace(source_string, "\r\n", "\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);