Java StringBuffer-字符串索引超出范围

Java StringBuffer-字符串索引超出范围,java,Java,下面的代码应该在hans->snah中反转字符串 StringBuffer hilfsbuffer = new StringBuffer(1); for (int i = 0; i < buffer.length()/2; i++) { hilfsbuffer.setCharAt(0, buffer.charAt(i)); //Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String in

下面的代码应该在hans->snah中反转字符串

StringBuffer hilfsbuffer = new StringBuffer(1);

for (int i = 0; i < buffer.length()/2; i++) {
  hilfsbuffer.setCharAt(0, buffer.charAt(i)); //Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
  buffer.setCharAt(i, buffer.charAt(buffer.length()-1-i));
  buffer.setCharAt(buffer.length()-1-i, hilfsbuffer.charAt(0)); //Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
}
StringBuffer hilfsbuffer=新的StringBuffer(1);
对于(int i=0;i
在注释中,您可以看到错误


如果需要,请询问更多详细信息。

试试这个StringBuilder可以为您反转它

StringBuilder sb = new StringBuilder();
sb.append("hans");
sb.reverse();
System.out.println(sb.toString());
编辑:


正如已经指出的,StringBuffer还提供了一种reverse()方法。

问题在于,当您创建一个类似的
StringBuffer
时:

StringBuffer hilfsbuffer = new StringBuffer(1);
缓冲区本身的容量为1,但底层的
字符串仍然为空。因此,当你尝试这样的事情时:

hilfsbuffer.setCharAt(0, buffer.charAt(i));
0超出范围,您将获得
StringIndexOutOfBoundsException

从文档中:

StringBuffer(整数容量)

构造一个字符串缓冲区,缓冲区中不包含任何字符,并且具有指定的初始容量


您可以使用StringBuffer.reverse()方法反转字符串,从而避免循环和错误。

请发布SSCCE。什么是
缓冲区
?此代码无法编译。为什么不使用
char
而不是
新的StringBuffer(1)
?抱歉,我没有时间回答这个问题,如果您所要做的只是反转字符串,那么其他答案是对的,
StringBuffer
StringBuilder
已经有了
reverse()