Відповіді:
Мені подобається використовувати регулярні вирази. У цьому випадку ви можете зробити:
string replacement = Regex.Replace(s, @"\t|\n|\r", "");
Регулярні вирази не такі популярні у світі .NET, як у динамічних мовах, але вони дають багато сил для маніпулювання рядками.
Ви хочете використати String.Replaceдля видалення символу.
s = s.Replace("\n", String.Empty);
s = s.Replace("\r", String.Empty);
s = s.Replace("\t", String.Empty);
Зауважте, що String.Trim(params char[] trimChars)лише видалення провідних та кінцевих символів trimCharsіз екземпляра, на який посилається.
Ви можете зробити метод розширення, який дозволяє уникнути проблем із виконанням вищезгаданих даних про створення безлічі тимчасових рядків:
static string RemoveChars(this string s, params char[] removeChars) {
Contract.Requires<ArgumentNullException>(s != null);
Contract.Requires<ArgumentNullException>(removeChars != null);
var sb = new StringBuilder(s.Length);
foreach(char c in s) {
if(!removeChars.Contains(c)) {
sb.Append(c);
}
}
return sb.ToString();
}
Я знаю, що це стара публікація, проте я думав, що поділюсь методом, який використовую для видалення нових символів рядків.
s.Replace(Environment.NewLine, "");
Список літератури:
MSDN String.Replace метод та властивість MSDN Environment.NewLine
Якщо важлива швидкість і низьке використання пам'яті, зробіть щось подібне:
var sb = new StringBuilder(s.Length);
foreach (char i in s)
if (i != '\n' && i != '\r' && i != '\t')
sb.Append(i);
s = sb.ToString();
просто зроби це
s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty);
Підхід LINQ:
string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'";
string s1 = String.Join("", s.Where(c => c != '\n' && c != '\r' && c != '\t'));
string.Joinяке буде викликати ToStringкожен charповернутий запит. Краще просто передати результати запиту stringконструктору. s1 = new string(s.Where(....).ToArrary());
Правильний вибір дійсно залежить від того, наскільки великою є вхідна рядок і якою є потреба у виконанні та пам'яті, але я б використовував регулярний вираз, наприклад
string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty);
Або якщо нам потрібно застосувати одну і ту ж заміну кілька разів, краще використовувати компільовану версію для типу Regex
var regex = new Regex(@"\r\n?|\n|\t", RegexOptions.Compiled);
string result = regex.Replace(s, String.Empty);
ПРИМІТКА. Для різних сценаріїв потрібні різні підходи для досягнення найкращої продуктивності та мінімального споживання пам'яті
Ну ... Я хотів би, щоб ви зрозуміли більш конкретні сфери космосу. \tнасправді розбирається як горизонтальний простір, а не вертикальний простір. (випробування вставлення \tв Блокнот)
Якщо ви використовуєте Java, просто використовуйте \v. Дивіться посилання нижче.
\h- Горизонтальний символ пробілу:
[\t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\v- вертикальний символ пробілу:
[\n\x0B\f\r\x85\u2028\u2029]
Але мені відомо, що ви використовуєте .NET. Тож моя відповідь на заміну кожного вертикального простору є ..
string replacement = Regex.Replace(s, @"[\n\u000B\u000C\r\u0085\u2028\u2029]", "");
Ви можете використовувати, Trimякщо ви хочете видалити від початку та до кінця.
string stringWithoutNewLine = "\n\nHello\n\n".Trim();
FYI,
Trim () робить це вже.
Наступний зразок LINQPad:
void Main()
{
var s = " \rsdsdsdsd\nsadasdasd\r\n ";
s.Length.Dump();
s.Trim().Length.Dump();
}
Виходи:
23
18