C# 制表符包装的字符串
本文关键字:字符串 包装 制表符 | 更新日期: 2023-09-27 18:32:23
我正在将一个大字符串(大约 100 行)写到文本文件中,并希望将整个文本块设置为选项卡。
WriteToOutput("'t" + strErrorOutput);
我在上面使用的行仅制表符文本的第一行。如何缩进/按 Tab 键键处理整个字符串?
将所有
换行符替换为换行符,后跟制表符:
WriteToOutput("'t" + strErrorOutput.Replace("'n", "'n't"));
File.WriteAllLines(FILEPATH,input.Split(new string[] {"'n","'r"}, StringSplitOptions.None)
.Select(x=>"'t"+x));
为此,
您必须具有有限的行长度(即<100个字符),此时此问题变得容易。
public string ConvertToBlock(string text, int lineLength)
{
string output = "'t";
int currentLineLength = 0;
for (int index = 0; index < text.Length; index++)
{
if (currentLineLength < lineLength)
{
output += text[index];
currentLineLength++;
}
else
{
if (index != text.Length - 1)
{
if (text[index + 1] != ' ')
{
int reverse = 0;
while (text[index - reverse] != ' ')
{
output.Remove(index - reverse - 1, 1);
reverse++;
}
index -= reverse;
output += "'n't";
currentLineLength = 0;
}
}
}
}
return output;
}
这会将任何文本转换为文本块,该文本块分为长度lineLength
行,并且所有文本都以制表符开头并以换行符结尾。
您可以复制字符串以进行输出,将 CRLF 替换为 CRLF + TAB。 并将该字符串写入输出(仍以初始 TAB 为前缀)。
strErrorOutput = strErrorOutput.Replace("'r'n", "'r'n't");
WriteToOutput("'t" + strErrorOutput);
如果您在这里寻找一种将字符串自动换行到一定宽度的方法,并将每一行缩进(就像我一样),这里有一个解决方案作为扩展方法。 大致基于上面的答案,但使用正则表达式将原始文本拆分为单词和空格对,然后重新连接它们,根据需要添加换行符和缩进。 (不检查完整性输入,因此如果需要,您需要添加它)
public string ToBlock(this string text, int lineLength, string indent="")
{
var r = new Regex("([^ ]+)?([ ]+)?");
var matches = r.Match(text);
if (!matches.Success)
{
return text;
}
string output = indent;
int currentLineLength = indent.Length;
while (matches.Success)
{
var groups = matches.Groups;
var nextLength = groups[0].Length;
if (currentLineLength + nextLength <= lineLength)
{
output += groups[0];
currentLineLength += groups[0].Length;
}
else
{
if (currentLineLength + groups[1].Length > lineLength)
{
output += "'n" + indent + groups[0];
currentLineLength = indent.Length + groups[0].Length;
}
else
{
output += groups[1] + "'n" + indent;
currentLineLength = indent.Length;
}
}
matches = matches.NextMatch();
}
return output;
}