Как "обрезать" многострочную строку?
Я пытаюсь использовать Trim()
на многострочной строке, однако только первая строка будет Trim()
. Кажется, я не могу понять, как удалить все пробелы из начала каждой строки.
string temp1 = " test ";
string temp2 = @" test
line 2 ";
MessageBox.Show(temp1.Trim());
//shows "test".
MessageBox.Show(temp2.Trim());
//shows "test"
" line2 ".
могу ли я использовать Trim
/TrimStart
/TrimEnd
на несколько строк?
6 ответов
могу ли я использовать Trim/TrimStart/TrimEnd на многострочной строке?
да, но он только обрезает строку в целом, и не обращает внимания на каждую строку в содержимом строки.
Если вам нужно обрезать каждую строку, вы можете сделать что-то вроде:
string trimmedByLine = string.Join(
"\n",
temp2.Split('\n').Select(s => s.Trim()));
это обрезает каждую строку
temp2 = string.Join(Environment.NewLine,
temp2.Split(new []{Environment.NewLine},StringSplitOptions.None)
.Select(l => l.Trim()));
string temp3 = String.Join(
Environment.NewLine,
temp2.Split(new char[] { '\n', '\r' },StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Trim()));
разделить, обрезать, присоединиться
string[] lines = temp1.Split(new []{Environment.NewLine});
lines = lines.Select(l=>l.Trim()).ToArray();
string temp2 = string.Join(Environment.NewLine,lines);
для этого можно использовать регулярные выражения.
вот PHP (я на Mac, поэтому нет C#) пример preg_replace, который делает это
<?php
$test = " line 1
line 2 with blanks at end
line 3 with tabs at end ";
print $test;
$regex = '/[ \t]*\n[ \t]*/';
$res = trim(preg_replace($regex, "\n", $test));
print $res;
регулярное выражение preg_replace удаляет пробелы вокруг линейных каналов, обрезка удаляет их в начале и конце.
Регулярное Выражение C#.Заменить метод должен работать, как прежде.
не по теме, но в PowerShell часы, когда вы используете этот код:
$content = Get-Content file.txt;
$trimmed = $content.Trim();
так, не очевидно, $content
это массив линий, поэтому PS будет волшебным образом выполнять Trim
для каждой строки.
заставляя его в строку:
[System.String]$content = Get-Content file.txt;
не будет работать, так как PowerShell затем удаляет все возвраты каретки, чтобы сделать одну строку..!