StringBuilder是否应始终用于字符串操作?

时间:2012-06-04 00:12:20

标签: java

  

可能重复:
  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;
}

2 个答案:

答案 0 :(得分:6)

如果你只是像在backAround()方法中那样“将几个元素粘在一起”,你也可以使用+符号。编译器会将此转换为适当的StringBuilder.append(),所以为什么要打扰'拼出'。

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

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

P.S。我应该说StringBuilder也会为你带来更多的编辑能力(例如,你可以设置它的长度),并且,如果存在Appendable接口,你实际上可以创建更多的泛型方法要么附加到StringBuilder,要么附加到例如一个StringWriter。但这些是边缘情况,我会提交。

答案 1 :(得分:1)

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

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

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

  • 删除索引处的字符
  • 将索引附加到索引
  • 获取特定序列的索引
  • 以及更多

如果您想查看StringBuilder的文档:

String Builder

我希望这能帮到你!