将具有'\ t'的字符串扩展为特定长度

时间:2019-06-12 11:25:20

标签: c# string escaping

我有一个包含3个'\ t'的字符串,当我使用诸如以下的正确方法时:

string.padright(totalWidth);

string.format("{0,width}",myText);

或者甚至是一个从头开始的函数,我都遇到了一个问题,即字符串中的'\ t'转义为1,但取决于字符串,介于0到8之间。

最后,如果我有这个字符串“ blah \ tblah \ tblah”,并且我将这些方法应用为长度为20的字符串,我会得到这个

"blah    blah    blah      "

长度为30。

在显示字符串后如何计算'\ t'填充的空格?

1 个答案:

答案 0 :(得分:-1)

制表符有点奇怪,因为它们是单个字符,但是有效宽度是可变的。这取决于当前屏幕上有多少个字符以及标签的宽度。

可以编写将制表符扩展为空格的功能。

string ExpandTabs(string input, int tabWidth = 8)
{
    if (string.IsNullOrEmpty(input))
        return input;

    var result = new System.Text.StringBuilder(input.Length);

    foreach (var ch in input)
    {
        if (ch == '\t')
        {
            result.Append(' ');
            while (result.Length % tabWidth != 0)
                result.Append(' ');
        }
        else
            result.Append(ch);
    }

    return result.ToString();
}

请注意,这是一个非常幼稚的功能。如果嵌入了\r\n字符,它将无法正常工作,其他字符也会引起问题。