String方法Append():StringBuilder vs StringBuffer

时间:2013-06-18 15:47:18

标签: java string

我有这个方法,

  public static void main(String[] args) {

    String s = "Java";
    StringBuilder buffer = new StringBuilder(s);
    change(buffer);

       System.out.println("What's strBuf.charAt(5)? " + strBuf.charAt(3));
       System.out.println(buffer);
  }

     private static void change(StringBuilder buffer) {

          buffer.append(" and HTML");
  }

当我使用StringBuilder运行代码时,我收到错误消息, “构造函数StringBuilder(String)未定义 对于StringBuilder类型

,方法charAt(int)是未定义的

在调试过程中,我尝试了StringBuffer,它运行得很好。 StringBuffer对象的内容被编译为“Java and Eclipse ..”

  public static void main(String[] args) {

    String s = "Java";
    StringBuffer strbuf = new StringBuffer(s);
    change(strbuf);

               System.out.println("The Stringbuffer.charAt(5) is ? " + strbuf.charAt(3));
           System.out.println(strbuf);
 }

       private static void change(StringBuffer strbuf) {

                       strbuf.append(" and Eclipse");
 }
 }

有人可以告诉我为什么后者“StringBuffer”工作而且Stringbuilder没有。  或者是否将字符串传递给StringBuilder构造函数是合法的。 “StringBuilder的(一个或多个);”

3 个答案:

答案 0 :(得分:4)

StringBuilder 确实拥有constructor accepting a String as an argument,而 拥有a .charAt() method(它必须实现它,因为它实现了{{} 1}})。

结论:这是IDE部分的一个不幸事件,它没有导入正确的CharSequence。您使用另一个库,该库具有以相同名称实现类的不幸“属性” - 但不在同一个包中。

如果导入行是:

,请查看文件顶部
StringBuilder

答案 1 :(得分:2)

您可能导入了错误的StringBuilder类而不是java.lang.StringBuilder,它具有StringBuilder(String)构造函数和charAt(int)方法。

你能检查一下你的导入吗?你应该有这个

import java.lang.StringBuilder;

答案 2 :(得分:0)

确保您将您的班级名称定义为StringBuilder

例如: 即使你正确导入它

 import java.lang.StringBuilder;

但是如果你把你的课写成

 public class StringBuilder { //If class name matches below Object Creation
 public static void main(String[] args) {

String s = "Java";
StringBuilder buffer = new StringBuilder(s);  //Object creation
change(buffer);

   System.out.println("What's strBuf.charAt(5)? " + strBuf.charAt(3));
   System.out.println(buffer);
}

 private static void change(StringBuilder buffer) {

      buffer.append(" and HTML"); //you will get this error at append
  //The method append(String) is undefined for the type StringBuilder
} 
}

建议

将您的班级名称重命名为其他但不是 StringBuilder