2013-09-02 3 views
1
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, поэтому я не уверен, что здесь отсутствует. Может кто-нибудь указать мне, что случилось?Почему следующий вызов «подстроки» терпит неудачу?

+4

из любопытства: как 9-й линии может быть «Линия 1»?;-) –

ответ

15

substring действительно достоверный метод - но он возвращает String ссылку, а не StringBuilder, так что вы не можете присвоить возвращаемое значение sb1. Это должно работать:

String x = sb.append("ing").append("a").substring(0); 

Однако, вы должны также сделать шаг назад и посмотреть на сообщение об ошибке снова. Убедитесь, что вы понимаете каждую его часть, и спросите себя, почему этого недостаточно, чтобы самому самому диагностировать проблему. Такая самооценка должна помочь вам диагностировать будущие проблемы без консультации с сообществом. (Я уверен, что многие люди с удовольствием помогут, но для всех это будет более эффективным, если вы сами это сделаете.)

Одна из полезных методик здесь заключается в том, чтобы максимально уменьшить объем проблемы - так что я «d вероятно, изолировав его в один вызов метода первого:

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 в этом заявлении, что имеет быть возвращение значение метода - документацию которого вы также должны проверить, как само собой разумеющееся.

+0

Полностью избили вас на 5 секунд: D –

+2

Я поддержал все только для хорошей меры;) – Joren

+3

+1 для обучения чтению сообщений об ошибках. –

5

substring(0) возвращает String, и вы пытаетесь присвоить его StringBuilder.

1

StringBuilder#substring(int) объявлен как:

public String substring(int start) 

не как StringBuilder. Вам нужно создать новый StringBuilder из строки, которую вы получите, или изменить тип sb1 на String, и в этом случае я бы переименовал его также для ясности, поскольку строку с именем sb можно было бы считать StringBuilder.

1

substring возвращается String но вы пытаетесь сохранить его в StringBuilder

+0

почему downvoted ?? – Azodious

0

Дополнения:

вы также можете использовать new StringBuilder()

sb1=new StringBuilder(sb.append("ing").append("a").substring(0)); // Line 1 
0

Заменить

sb1 = sb.append("ing").append("a").substring(0); 

с

sb1 = sb.append("ing").append("a"); 
Смежные вопросы