Як я можу замінити перерви рядка в рядку на 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, щоб замінити їх чимось іншим, можливо, обгорнутим як метод розширення. Не забудьте спочатку перевірити нульові значення, перш ніж викликати Замінити або надані методи розширення.
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');
і в цьому порядку, щоб не робити зайвих розривів рядків, коли ви знайдете комбінацію рядків, що закінчуються символами.
якщо ви хочете "очистити" нові рядки, коментар flamebaud за допомогою 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
}
}
Мені потрібно було замінити \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);