Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Stringbuffer转换为字符串()后调用字符串子序列()_Java_String_Stringbuilder - Fatal编程技术网

Java 将Stringbuffer转换为字符串()后调用字符串子序列()

Java 将Stringbuffer转换为字符串()后调用字符串子序列(),java,string,stringbuilder,Java,String,Stringbuilder,我在一个现有的Java程序代码中发现了以下剪报: StringBuffer b = new Stringbuffer() // fill the StringBuffer (...) String temp = b.toString(); return temp.subSequence(0, b.toString().length() - 1); 我不明白他们为什么要从位置0到最后做一个子序列。 转换为字符串后StringBuilder的格式是否如此难看 他们,他们写的代码已经不在我的公司了

我在一个现有的Java程序代码中发现了以下剪报:

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

String temp = b.toString();
return temp.subSequence(0, b.toString().length() - 1);
我不明白他们为什么要从位置0到最后做一个
子序列

转换为字符串后StringBuilder的格式是否如此难看

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

希望你们能帮助我。

接下来:

temp.subSequence(0, b.toString().length() - 1);
正在剥离最后一个字符,但不返回相同的字符串

    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
如果有人想对其进行子串,您可以按如下方式对其进行子串

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

其思想是从末尾去掉一个字符,请注意,所有Java标准库类都遵循关于开始/结束索引参数的约定,star是包含的,end是独占的。我也同意代码很难看,应该是这样的

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

它更短,也更高效。另外,StringBuffer是一个遗留类,您可以用更快的StringBuilder替换它。它与
substring()
方法相同。因此可以使用其中任何一种方法。
符合

此方法的调用形式为
某人随后(开始、结束)
行为方式与调用方式完全相同
sb.子串(开始、结束)
提供此方法是为了使此类能够实现CharSequence接口


是的,但是为什么?这毫无意义。。。最后一个字符是字符串生成器中的特殊字符吗?因为我附加到字符串生成器的最后一个字符不应该stripped@user2413035. 如果不想去掉最后一个字符,只需返回
temp
。不需要这样做。在子字符串之后,输出仅为
ab
?是的,子序列和子字符串都将给出相同的输出。那么直接到StringBuffer?什么是sb?sb应该是b。是我的错。StringBuffer.substring创建了一个我们立即需要的字符串。我将告诉您最典型的原因:在循环中,一些列表元素被连接到一个带有分隔符的字符串中。它的原始版本只是在每个成员后添加分隔符,因此必须通过删除最后一个字符来修复结果。