用于创建包含多个空白字符的字符串的替代方法

时间:2009-11-11 16:12:44

标签: c# string spaces

我想知道是否有更多的OO方式在C#中创建空格。

字面太空码!

我目前有tabs += new String(" ");,我不禁觉得这有点让人想起使用""代替String.Empty

我可以使用什么来创建非" "的空间?

12 个答案:

答案 0 :(得分:43)

你可以写

" "

而不是

new String(' ')

这有帮助吗?


根据您的操作,您可能需要查看接受字符和“重复”计数的StringBuilder.Append重载:

var tabs = new StringBuilder();
tabs.Append(' ', 8);

string constructor构建字符串'重复'计数字符串:

var tabs = new string(' ', 8);

这是一个企业级OO解决方案,可满足您所有的空间生成需求:

public abstract class SpaceFactory
{
    public static readonly SpaceFactory Space = new SpaceFactoryImpl();

    public static readonly SpaceFactory ZeroWidth = new ZeroWidthFactoryImpl();

    protected SpaceFactory { }

    public abstract char GetSpace();

    public virtual string GetSpaces(int count)
    {
        return new string(this.GetSpace(), count);
    }

    private class SpaceFactoryImpl : SpaceFactory
    {
        public override char GetSpace()
        {
            return '\u0020';
        }
    }

    private class ZeroWidthFactoryImpl : SpaceFactory
    {
        public override char GetSpace()
        {
            return '\u200B';
        }
    }
}

答案 1 :(得分:15)

现在您已在评论中澄清:

  

在我的实际代码中,我正在做新事物   字符串('',numberOfSpaces)所以我   可能还需要使用新的   字符串部分。

......到目前为止的其他答案实际上是无用的:(

可以写:

const char Space = ' ';

然后使用

new string(Space, numberOfSpaces)

但我认为没有任何好处

new string(' ', numberOfSpaces)

答案 2 :(得分:8)

如果空格的数量会发生变化,那么你可以这样做:

public static string Space(int count)
{
    return "".PadLeft(count);
}

Space(2);

答案 3 :(得分:5)

没有理由这样做。其他条件相同,smaller code is better codeString.Emptynew String(' ')""" "的内容相同,他们只需要更多字符即可。

试图让它“更多OO”只是增加了角色而没有任何好处。面向对象本身并不是目的。

答案 4 :(得分:3)

根据代码的普遍程度,StringBuilder方式可能会更好。

StringBuilder tabs = new StringBuilder();
...

tabs.Append(" ");

你也可以混合常数......

StringBuilder tabs = new StringBuilder();
const string SPACE = " ";
...

tabs.Append(SPACE);

答案 5 :(得分:3)

扩展字符串以提供添加空间的方法

public static string AddSpace(this String text, int size)
{
   return text + new string(' ', size)
}

虽然它本身很糟糕。

答案 6 :(得分:2)

更“OO”的方式是找到一种更简单的方法来解决您的大型业务问题。例如,您有一个名为tabs的变量的事实告诉我您正在尝试滚动自己的列对齐代码。 String.Format直接支持,例如

// Left-align name and status, right-align amount (formatted as currency).
writer.WriteLine("Name                 Status         Amount");
writer.WriteLine("-------------------- ---------- ----------");
foreach(var item in items) {
    writer.WriteLine(string.Format("{0,-20} {1,-10} {2,10:C}", item.Name, item.Status, item.Amount));
}

答案 7 :(得分:1)

如果允许使用该语言,则可以将扩展属性添加到类型为String的类型中,例如:

public static class StringExt
{
    public static char Space(this String s)
    {
        get {
            return ' ';
        }
    }
}

但这是不可能的。我认为如果它是一个可本地化的东西,最好将空间保留在属性中,但我认为空间在所有语言中都是通用的。

答案 8 :(得分:1)

我认为你正在采用OO的方式......简单地添加空间不需要整个课程。

tabs += new String(' ');

tabs += " ";

很好。

答案 9 :(得分:0)

我认为您可以使用"\t"为您提供制表符。这可能会使空间更清晰。

答案 10 :(得分:0)

StringBuilder.Insert和StringBuilder.Append允许您创建任何数字空格,例如sb.Insert(0,“”,20)将在sb(StringBuilder)对象的开头插入20个空格。

答案 11 :(得分:0)

您可以创建类扩展。

public static class StringExtensions
    {
        public static string GetSpace(this String)
        {
           return " ";
        }
    }

您可以叫这个。

String.GetSPace();