我有这个方法,
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的(一个或多个);”
答案 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