【问题标题】:Should StringBuilders always be used for string manipulation? [duplicate]StringBuilders 是否应该始终用于字符串操作? [复制]
【发布时间】:2012-06-08 03:43:04
【问题描述】:

可能重复:
when to use StringBuilder in java

如果不是,这些代码中哪一个更好,为什么

public String backAround(String str) {
   int len = str.length();
   StringBuilder sb = new StringBuilder(str);
   char chEnd = sb.charAt(len-1);
  if(len > 0){
  sb = sb.append(chEnd);
  sb= sb.insert(0,chEnd);

  str= sb.toString();
  return str;

  }else{ return str;}
}

public String backAround(String str) {
  // Get the last char
  String back = str.substring(str.length()-1, str.length());
  return back + str + back;
}

【问题讨论】:

标签: java


【解决方案1】:

如果您只是像在 backAround() 方法中那样“将几个元素粘在一起”,那么您也可以使用 + 符号。编译器会为你把它转换成合适的 StringBuilder.append()s,所以为什么还要“拼写出来”呢。

显式使用 StringBuilder 的想法是,原则上您可以手动优化元素添加到字符串的准确方式,包括设置初始缓冲区容量并确保您不会意外创建不必要的中间 String 对象编译器可能无法预测这些事情的情况。

所以本质上,当有稍微复杂的逻辑来决定要附加到字符串的内容时,显式使用 StringBuilder。例如,如果您在循环中附加内容,或者附加内容取决于不同点的各种条件。您可能会使用 StringBuilder 的另一种情况是,如果需要从各种方法构建字符串,例如:然后您可以将 StringBuilder 传递给不同的方法并要求它们附加各种元素。

附:我应该说 StringBuilder 也给你带来了更多的编辑能力(例如,你可以设置它的长度),并且考虑到 Appendable 接口的存在,你实际上可以创建更多的 generic 方法附加到 StringBuilder 或附加到例如一个字符串编写器。但这些都是边缘案例,我会提交。

【讨论】:

    【解决方案2】:

    这真的取决于你想要做什么。在您的情况下,您似乎试图取一个字符串并取最后一个字母并将其添加到前面,然后将另一个添加到末尾。为此,我可能会这样做:

    public String manipulate(String string)
    {
        char c = string.charAt(string.length);
        return c + string + c;
    }
    

    在这种情况下,您不必使用 StringBuilder。在某些情况下 StringBuilder 类很有用。以下是 StringBuilder 可以做的一些难以用 String 做的事情:

    • 删除索引处的字符
    • 在索引处附加字符
    • 获取特定序列的索引
    • 还有更多

    如果您想查看 StringBuilder 的文档:

    String Builder

    希望对你有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 2018-10-24
      • 2016-02-16
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多