2

可能重复:
何时在 java 中使用 StringBuilder

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

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;
}
4

2 回答 2

6

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

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

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

PS 我应该说 StringBuilder 也为您购买了更多的编辑能力(例如,除其他外,您可以设置它的长度)并且,鉴于 Appendable 接口的存在,您实际上可以创建更多的通用方法,或者附加到 StringBuilder或例如 StringWriter。但这些都是边缘案例,我会提交。

于 2012-06-04T01:02:20.853 回答
1

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

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

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

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

如果您想查看 StringBuilder 的文档:

字符串生成器

我希望这对你有所帮助!

于 2012-06-04T00:28:42.183 回答