【问题标题】:Converting from Integer value to StringBuffer with zeros as the default value从整数值转换为默认值为零的 StringBuffer
【发布时间】:2011-11-13 13:12:43
【问题描述】:

我正在尝试形成一个初始值为 00000..的 StringBuffer..

我的问题是初始值取决于一个整数变量,并且基于整数变量的值,StringBuffer 中应该有许多零。

例如int length=9,因此我的 StringBuffer 应该以 000000000....(9 个零)...

我无法摆脱这个问题。任何人都可以请指导我。

我想出的一种方法是获取整数值并将那么多值存储在字符串数组中,然后将字符串数组写入 StringBuffer,但这似乎是一种非常低效的方法。请指导我。

【问题讨论】:

标签: java arrays integer stringbuffer


【解决方案1】:

迟到的答案并且可能没有用,但是如果您使用的是 Apache Commons Lang,并且许多重要的 Java 项目都在使用,那么您可以通过他们的 StrBuilder,尤其是其 appendPadding 获得您想要的东西方法。

你可以写:

StrBuilder b = new StrBuilder();
b.appendPadding(9, '0').append(...).append(...)....

【讨论】:

    【解决方案2】:

    这是您可以使用的实用方法:

    public StringBuilder repeatChars(StringBuilder sb, char c, int n) {
        for (int i = 0; i < n; ++i) {
            sb.append(c);
        }
    
        return sb;
    }
    

    这样称呼它:

    StringBuilder sb = new StringBuilder();
    
    // Add nine zeroes
    repeatChars(sb, '0', 9);
    

    注意:我让它返回StringBuilder,以便您可以链接方法调用。

    最好使用StringBuilder 而不是StringBuffer,因为StringBuilder 没有StringBuffer 所具有的不必要的同步。

    真的没有比使用循环执行此操作更有效的方法了。不要太担心微优化(担心简单的语句不够高效)。

    【讨论】:

    • 好吧,在我的帖子提到相同的逻辑后几秒钟我就对我的问题发表了评论......谢谢你的帮助......!......
    • 错过了使用“goes to”运算符的绝佳机会,while(n --&gt; 0) :-D
    • @glowcoder 是“前往”操作员吗?你是认真的吗?这在 Java 中不存在。
    • @Jesper 这是个玩笑,但它实际上是有效的 Java。它实际上是-- 运算符和&gt; 运算符的组合。
    • @glowcoder 啊哈,它确实会起作用,有趣的把戏! ;-)
    【解决方案3】:

    我不确定在一行中有什么可以做的,但你可以使用:

    StringBuffer buffer = new StringBuffer(length);
    for (int i = 0; i < length; i++)
    {
        buffer.append('0');
    }
    

    (我怀疑附加一个char 比附加一个字符串稍微更有效,因为不需要进行空值检查并且长度是已知的。但它不会很重要。)

    顺便说一下,如果您使用的是 Java 5 或更高版本,通常使用 StringBuilder 比使用 StringBuffer 更好,这样您就不会进行不必要的同步。

    这使用长度作为初始容量,如果您不打算再追加,这很好 - 但如果您以后要追加数据,请适当地更改它以提供更大的容量。

    【讨论】:

      【解决方案4】:

      除非您坚持使用 Java 1.4.2(或更早版本),或者您有非常具体理由使用StringBuffer,否则您几乎应该始终使用StringBuilder。 p>

      一个简单的循环有什么问题:

      StringBuilder buf = new StringBuilder(length); // might want to use more if you know that you'll append something
      for (int i = 0; i < length; i++) {
        buf.append('0');
      }
      

      如果您知道要使用的最大零数,那么您可以这样做:

      // make sure never to change the content of this
      private static final char[] ZEROES = new char[] { '0', '0', '0', '0', '0', '0', '0', '0', '0' };
      
      // when you need the zeroes do this:
      StringBuilder buf = new StringBuilder(length);
      buf.append(ZEROES, 0, length);
      

      【讨论】:

      • 我知道零的数量取决于整数变量,但我当然不想使用任何数组........我想通了。/..它很容易使用循环完成......
      【解决方案5】:
      int numZeroes = 5;
      StringBuilder sb = new StringBuilder();
      
      for (int i = 0; i < numZeroes; i++)
      {
          sb.append('0');
      }
      

      【讨论】:

      • 附加一个字符'0'会比一个字符串“0”更有效。
      • 确实如此。时间不早了,我应该在床上了:)
      猜你喜欢
      • 2012-05-07
      • 2013-01-02
      • 2019-10-03
      • 2011-01-01
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 2023-03-17
      • 2012-10-07
      相关资源
      最近更新 更多