转换Stringbuffer toString()后调用String subSequence()

时间:2013-08-09 08:52:20

标签: java string stringbuilder

我在现有的Java程序代码中发现了以下片段:

StringBuffer b = new Stringbuffer()
// fill the StringBuffer
(...)

String temp = b.toString();
return temp.subSequence(0, b.toString().length() - 1);

我不明白他们为什么从0位到最后位subSequence ... 将StringBuilder转换成字符串之后的格式是否丑陋?

他们,他们写的这段代码不再在我公司了,所以我不能问他们......

希望你们能帮助我。

4 个答案:

答案 0 :(得分:4)

我们的想法是从最后删除一个字符,请注意所有Java标准库类都遵循关于开始/结束索引参数的约定,star是包含的,end是独占的。此外,我同意代码是丑陋的,它应该是

...
return b.subSequence(0, b.length() - 1);

它更短,也更有效率。 StringBuffer也是一个遗留类,可以用更快的StringBuilder

替换它

答案 1 :(得分:1)

子序列:

temp.subSequence(0, b.toString().length() - 1);

正在剥离最后一个字符,而不是返回相同的字符串。

答案 2 :(得分:0)

    StringBuffer b = new StringBuffer();
    b.append("a");
    b.append("b");
    b.append("c");
    String temp = b.toString();        
    System.out.println(temp); // now out put is abc

如果有人想要subString,你可以按如下方式对其进行subString。

    System.out.println(temp.subSequence(0, b.toString().length() - 1));
    System.out.println(temp.substring(0, b.toString().length() - 1));

答案 3 :(得分:0)

substring()方法相同。所以可以使用其中任何一个。
根据{{​​3}}

  

调用这种形式的方法
   sb.subSequence(开始,结束)
  行为与调用完全相同    sb.substring(开始,结束)
  提供此方法以便此类可以实现CharSequence接口。