为什么以下"substring"调用失败?

Und*_*Dog 1 java

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); 
    }   
}
Run Code Online (Sandbox Code Playgroud)

这个程序在第1行给出了编译器错误.这substring是StringBuilder类中的一个有效方法,所以我不确定我在这里缺少什么.有人能指出我的错误吗?

Jon*_*eet 15

substring确实是一个有效的方法 - 但它返回一个String引用,而不是一个StringBuilder,所以你不能分配返回值sb1.这应该工作:

String x = sb.append("ing").append("a").substring(0);
Run Code Online (Sandbox Code Playgroud)

然而,你应该退后一步,并在错误信息再看看.确保你理解它的每一部分,并问自己为什么这不足以自己诊断问题的信息.这种自我评估应该帮助您在不咨询社区的情况下诊断未来的问题.(我相信很多人都很乐意提供帮助,但如果你能自己解决这个问题,对每个人来说都会更有效率.)

这里一个有用的技术是尽可能地减少问题的范围 - 所以我可能首先将它隔离到单个方法调用:

sb.append("ing").append("a");
sb1 = sb.substring(0);
Run Code Online (Sandbox Code Playgroud)

此时,当第二行标记错误时,不需要考虑.错误将是这样的:

Test.java:11: error: incompatible types
    sb1 = sb.substring(0);
                      ^
  required: StringBuilder
  found:    String
1 error
Run Code Online (Sandbox Code Playgroud)

现在可以肯定的是,这不是世界上最清晰的错误信息,但鉴于该语句中没有其他用法String,它必须是该方法的返回值 - 您的文档也应该检查当然.

  • 我赞成一切只是为了好的措施;) (2认同)

Jos*_*h M 5

substring(0)返回a String并且您正尝试将其分配给a StringBuilder.