【问题标题】:StringBuilder making new lines automaticallyStringBuilder 自动创建新行
【发布时间】:2014-05-10 00:26:09
【问题描述】:

我正在使用 StringBuilder 将列表转换为单个字符串。我不希望字符串有换行符,但它会自动为附加到字符串的每个列表值添加一个新行。

for (int i = 1; i <= ruleN; i++)
{
    string fizz = "F";
    string buzz = "B";
    string fizzBuzz = "FB";
    List<string> numberSet = new List<string>();
    if(i % ruleA == 0 && i % ruleB != 0) //if i is devisible by A  
                                         //but not B
    {
        numberSet.Add(fizz); 
    }
    if(i % ruleB == 0 && i % ruleA != 0) //if i is devisible by B 
                                         //but not A
    {
        numberSet.Add(buzz);
    }
    if(i % ruleA == 0 && i % ruleB ==0) //if i is devisible by both 
                                        //A and B
    {
        numberSet.Add(fizzBuzz);
    }
    if(i % ruleA != 0 && i % ruleB != 0) //if i is devisible by 
                                         //neither A nor B 
    {
        //convert the number to a string and add it to list numberSet
        string undevisible = Convert.ToString(i);
        numberSet.Add(undevisible);

    StringBuilder Builder = new StringBuilder();
    foreach (string number in numberSet)
    {
        // Append each string to the StringBuilder overload.
        Builder.Append(number).Append(" ");
    }
    string output = Builder.ToString();
    Console.WriteLine(output);

输出最终看起来像这样:

换行符是从哪里来的?

【问题讨论】:

  • Console.WriteLine(output); 在 for 循环内。应该在外面吗?
  • 导致修订版 2 的编辑删除了此问题的相关代码。我恢复了代码,但我不确定现在缩进是否正确,因为原始代码缩进很奇怪。也许缺少一些花括号。

标签: c# visual-studio-2010 .net-4.5 stringbuilder


【解决方案1】:

他们来自您的Console.WriteLine(output)。请注意,它在您的 for 循环内。

【讨论】:

  • 要对此进行扩展,@user3620903 可以切换到Console.Write(output)
  • 谢谢。我没注意到!
  • 我将 Console.Writeline(output) 以及 stringbuilder 和 list 初始化移到了 for 循环之外。现在一切正常。
【解决方案2】:

对于每个“i”,您构建一个 StringBuilder 并编写 Console.WriteLine。那是换行符。也许您的 for cicle 必须在 StringBuilder 创建之前停止?

【讨论】:

    【解决方案3】:

    Console.WriteLine 正是这样做的,因此对于通过第一个 for 循环的每次迭代,您都在向控制台写入一个新行。如果您希望将所有内容放在一行上,我建议您使用另一个 stringbuilder 对象来保存您要写入控制台的所有内容,然后在 for 循环之后执行 console.writeline。

    【讨论】:

      【解决方案4】:

      第一个循环在控制台打印后关闭,因此每次迭代都创建一个具有新值的新字符串构建器,然后使用 println() 方法打印它,该方法在新行中打印,

      还可以尝试优化代码,为什么不在 if 语句中使用 Builder.Append() 并且不使用列表类型定义变量?

      如果您的代码正是这样做的,则无需为该列表浪费内存。

      问候

      哈娜比扎尼

      【讨论】:

        猜你喜欢
        • 2011-01-26
        • 2013-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-19
        相关资源
        最近更新 更多