Как удалить новые строковые символы из строки?
У меня есть строка в следующем формате
string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'
Я хочу удалить все вхождения \n
и \r
из строки выше.
Я пробовал string s = s.Trim(new char[] {'\n', '\r'});
, но это не помогло.
Ответы
Ответ 1
Мне нравится использовать регулярные выражения. В этом случае вы можете сделать:
string replacement = Regex.Replace(s, @"\t|\n|\r", "");
Регулярные выражения не так популярны в мире .NET, как в динамических языках, но они обеспечивают большую мощность для управления строками.
Ответ 2
Вы хотите использовать 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();
}
Ответ 3
Я знаю, что это старый пост, однако я решил поделиться с ним методом, чтобы удалить новые строковые символы.
s.Replace(Environment.NewLine, "");
Литература:
Метод MSDN String.Replace и Свойство MSDN Environment.NewLine
Ответ 4
Если важны скорость и низкое использование памяти, сделайте следующее:
var sb = new StringBuilder(s.Length);
foreach (char i in s)
if (i != '\n' && i != '\r' && i != '\t')
sb.Append(i);
s = sb.ToString();
Ответ 5
просто сделайте это
s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty);
Ответ 6
Подход 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'));
Ответ 7
Правильный выбор действительно зависит от того, насколько велика строка ввода и какова потребность в перфорации и памяти, но я бы использовал регулярное выражение, например
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);
ПРИМЕЧАНИЕ. В разных сценариях используются разные подходы для достижения максимальной производительности и минимального потребления памяти.
Ответ 8
Хорошо... Я хотел бы, чтобы вы поняли более конкретные области пространства. \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]", "");
Ответ 9
FYI,
Trim() делает это уже.
Следующий пример LINQPad:
void Main()
{
var s = " \rsdsdsdsd\nsadasdasd\r\n ";
s.Length.Dump();
s.Trim().Length.Dump();
}
Выходы:
23
18
Ответ 10
Вы можете использовать Trim
, если вы хотите удалить из начала и конца.
string stringWithoutNewLine = "\n\nHello\n\n".Trim();