3

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

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

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

我不明白他们为什么subSequence从位置 0 到结尾……
转换成 String 后 StringBuilder 的格式有那么难看吗?

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

希望你们能帮帮我。

4

4 回答 4

4

这个想法是从末尾删除一个字符,请注意所有 Java 标准库类都遵循关于开始/结束索引参数的约定,星号是包含的,结束是排他的。我也同意代码很丑,应该是

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

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

于 2013-08-09T08:58:24.660 回答
1

子序列:

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

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

于 2013-08-09T08:55:04.677 回答
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 this 你可以 subString this 如下。

    System.out.println(temp.subSequence(0, b.toString().length() - 1));
    System.out.println(temp.substring(0, b.toString().length() - 1));
于 2013-08-09T08:58:15.847 回答
0

它与方法相同。因此substring()可以使用其中任何一种。
根据StringBuffer 文档

sb.subSequence(begin, end)形式的此方法的调用与调用 sb.substring
(begin, end)
的行为方式完全相同。 提供此方法是为了使此类可以实现 CharSequence 接口。

于 2013-08-09T08:58:35.407 回答