StringBuilder自动创建新行

时间:2014-05-09 15:35:15

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

我正在使用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);

输出最终看起来像这样:

enter image description here

新行来自何处​​?

4 个答案:

答案 0 :(得分:5)

他们来自你的Console.WriteLine(output)。请注意,这是在for循环中。

答案 1 :(得分:2)

对于每个&#39; i&#39;,您构建一个StringBuilder并编写Console.WriteLine。这是换行符。也许你的cicle必须在StringBuilder创建之前停止?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

如果您的代码正是这样做的,那么就不需要为该列表浪费内存。

此致

Hana Bizhani