我需要缩进多行文本(与this question for a single line of text相反)。
假设这是我的输入文本:
First line
Second line
Last line我需要的是这个结果:
First line
Second line
Last line注意每一行的缩进。
到目前为止,这就是我所拥有的:
var textToIndent = @"First line
Second line
Last line.";
var splittedText = textToIndent.Split(new string[] {Environment.NewLine}, StringSplitOptions.None);
var indentAmount = 4;
var indent = new string(' ', indentAmount);
var sb = new StringBuilder();
foreach (var line in splittedText) {
sb.Append(indent);
sb.AppendLine(line);
}
var result = sb.ToString();有没有更安全/更简单的方法来做这件事?
我关注的是拆分方法,如果从Linux、Mac或Windows传输文本,而新行可能在目标机器中被正确分割,那么这种方法可能会很棘手。
发布于 2014-04-05 01:35:42
既然您正在缩进所有的行,那么执行这样的操作如何:
var result = indent + textToIndent.Replace("\n", "\n" + indent);它应该同时覆盖Windows \r\n和Unix \n行尾。
发布于 2014-04-05 01:47:09
只需用换行符+缩进替换换行符:
var indentAmount = 4;
var indent = new string(' ', indentAmount);
textToIndent = indent + textToIndent.Replace(Environment.NewLine, Environment.NewLine + indent);发布于 2019-02-23 08:02:04
与这里发布的其他解决方案相比,下面的解决方案可能显得冗长乏味;但它有一些明显的优点:
static string Indent(this string str, int count = 1, char indentChar = ' ')
{
var indented = new StringBuilder();
var i = 0;
while (i < str.Length)
{
indented.Append(indentChar, count);
var j = str.IndexOf('\n', i + 1);
if (j > i)
{
indented.Append(str, i, j - i + 1);
i = j + 1;
}
else
{
break;
}
}
indented.Append(str, i, str.Length - i);
return indented.ToString();
}https://stackoverflow.com/questions/22875444
复制相似问题