class strb1
{
static public void main(String a_[])
{
StringBuilder sb = new StringBuilder("Test");
StringBuilder sb1;
sb1 = sb.append("ing").append("a").substring(0); //Line 1
System.out.println(sb);
System.out.println(sb1);
}
}
这个程序在第1行给出了编译器错误。substring
是StringBuilder类中的一个有效方法,所以我不确定我在这里缺少什么。有人能指出我的错误吗?
答案 0 :(得分:15)
substring
确实是一种有效的方法 - 但它会返回String
引用,而不是StringBuilder
,因此您无法将返回值分配给sb1
。这应该有效:
String x = sb.append("ing").append("a").substring(0);
但是,您应该还退后一步,再次查看错误消息。确保你理解它的每一部分,并问自己为什么没有足够的信息来自己诊断问题。这种自我评估应该帮助您在不咨询社区的情况下诊断未来的问题。 (我相信很多人都很乐意提供帮助,但如果你能自己解决这个问题,对每个人来说都会更有效率。)
这里有一个有用的技巧是尽可能减少问题的范围 - 所以我可能首先将它隔离到单个方法调用:
sb.append("ing").append("a");
sb1 = sb.substring(0);
此时,当第二行标记错误时,不需要考虑。错误类似于:
Test.java:11: error: incompatible types
sb1 = sb.substring(0);
^
required: StringBuilder
found: String
1 error
现在无可否认,这不是世界上最清晰的错误消息,但鉴于没有在该声明中使用String
,有< / em>是方法的返回值 - 您的文档也应该检查当然。
答案 1 :(得分:5)
substring(0)
返回String
,您正尝试将其分配给StringBuilder
。
答案 2 :(得分:1)
StringBuilder#substring(int)
声明为:
public String substring(int start)
不是StringBuilder。您需要从您获得的String中创建一个新的StringBuilder,或者将sb1的类型更改为String,在这种情况下,为了清楚起见,我还要重命名它,因为名为sb
的字符串可以假定为{ {1}}。
答案 3 :(得分:1)
substring
会返回String
,但您尝试将其存储在StringBuilder
答案 4 :(得分:0)
添加:
您也可以使用new StringBuilder()
sb1=new StringBuilder(sb.append("ing").append("a").substring(0)); // Line 1
答案 5 :(得分:0)
替换
sb1 = sb.append("ing").append("a").substring(0);
与
sb1 = sb.append("ing").append("a");