【问题标题】:StringBuilder number of characters written per lineStringBuilder 每行写入的字符数
【发布时间】:2013-01-16 23:22:21
【问题描述】:

您好,我创建了一些 C# 代码,它使用 StringBuilder object 写入 .txt 文件,一切似乎都很好,但问题是我每行需要正好 200 个字符。例如,当程序在一行中设置 10 个字符的字符串变量值(此值因数字字符而异)时,该行必须包含 190 个空格。这是我拥有的代码示例:

if (File.Exists(DLFile))
{
  using (StreamWriter sw = new StreamWriter(DLFile))
    {
      StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.Append("001" + partNumber + " ").AppendLine(); 
      String innerString = stringBuilder.ToString();
      sw.WriteLine(innerString);
      sw.Close();
    }
}

有一个名为“partNumber”的字符串variable,长度不同。有时长度可以是 15 或 14 或 10,但这个长度和空格的总和可能是 200(精确数量)。谁能帮我解决这个问题?

【问题讨论】:

  • 是否有理由使用StringBuilder 而不直接写入流?
  • oooh 没有理由只为执行良好的编程习惯
  • 请确保这不是常见的误解。不应该仅仅为了“提高性能”而用StringBuilder 替换所有字符串连接。这样做通常只在循环体内有用,即当我们谈论成百上千的连接时。在您的示例中,您甚至已经可以访问流,因此根本不连接字符串并直接写入流会更有效。

标签: c# stringbuilder maxlength


【解决方案1】:

只需使用PadRight(或PadLeft,如果合适的话),因为它的设计目的就是为了做到这一点。

sw.WriteLine(("001" + partNumber).PadRight(200));

【讨论】:

  • 这个工具能给我这个长度的结果吗? 001 + partNumber + padRight(200) = 200
  • @MarcoSomoza 您可以随时运行它并自己找出答案。您可能还想查看有关该方法的文档以更清楚地了解它的作用。
【解决方案2】:

当然。只需看看String.format 方法,并指定实现此目的的格式。

在您的情况下,这意味着执行以下操作:

string line = String.Format("{0,-200}", input);

【讨论】:

    【解决方案3】:

    简单计算然后using this overload怎么样?:

    ...
    
    var h = "001" + partNumber;
    stringBuilder.Append( h );
    
    stringBuilder.Append( ' ', 200 - h.Length );
    
    ...
    

    让它(有点)更防错:

    ...
    
    var h = "001" + partNumber;
    stringBuilder.Append( h );
    
    var a = 200 - h.Length;
    if ( a > 0 )
    {
        stringBuilder.Append( ' ', a );
    }
    
    ...
    

    【讨论】:

      【解决方案4】:

      您可以使用this string constructor 重复空格:

      int whiteSpacesLength = 200 - partNumber.Length; // assuming partNumber is never > 200
      string whiteSpaces = new String(' ', whiteSpacesLength);
      string innerString = partNumber + whiteSpaces;
      

      Demo

      (所以我认为没有理由在这里使用StringBuilder

      【讨论】:

        【解决方案5】:

        使用一个包含 200 个空格的已定义字符串,然后执行如下子字符串

        string space200 = "                                                                                                                                                                                                                                                                                                                                                                                    ";
              if (File.Exists(DLFile))
              {
                using (StreamWriter sw = new StreamWriter(DLFile))
                {
                  StringBuilder stringBuilder = new StringBuilder();
                  stringBuilder.Append("001").Append(partNumber).Append(space200.Substring(stringBuilder.ToString().Length, space200.Length - stringBuilder.ToString().Length)).AppendLine();
        
                  String innerString = stringBuilder.ToString();
                  sw.WriteLine(innerString);
                  sw.Close();
                }
              }
        

        【讨论】:

        • 提示我一个错误:startIndex 不能大于字符串的长度。参数名称:startIndex
        猜你喜欢
        • 2022-07-23
        • 2011-01-15
        • 1970-01-01
        • 2011-02-24
        • 2018-07-26
        • 1970-01-01
        • 1970-01-01
        • 2015-11-14
        相关资源
        最近更新 更多