2016-02-15 3 views
0

Я пытаюсь сделать Caesar cipher, и все должно работать, но я получаю сообщение об ошибке.java «Невозможно разрешить метод» setCharAt (int, char) '»

Вот мой метод шифрования:

public static String encrypt(String plainText, int rotation) { 
    // TODO: implement 
    for (int i = 0; i < plainText.length(); i++){ 
     char currentChar = plainText.charAt(i); 
     //ASCII 97 == a && 122 == z 
     if (currentChar >= 97 && currentChar <= 122){ 
      char newChar = (char) (currentChar + rotation); 
      if(newChar < 97){ 
       newChar = (char) (97 + (newChar - 122)); 
      } 
      plainText.setCharAt(i, newChar); 
     } 
    } 
    return plainText.toString(); 

После выполнения кода он возвращает эту ошибку:

Error:(26, 26) java: cannot find symbol 
symbol: method setCharAt(int,char) 
location: variable plainText of type java.lang.String 

Как я могу решить эту проблему?

+1

'setCharAt' - это метод из' StringBuilder', а не 'String'. – Berger

ответ

2

Посмотрите на setCharAt -> вы можете видеть это в StringBuilder, а не String.

Если вы хотите использовать его на String вы можете сначала создать StringBuilder, а затем вызвать .toString() на этом объекте:

StringBuilder plainText = new StringBuilder("Some string"); 
plainText.setCharAt(i, newchar); 
String myStr = plainText.toString(); 

Кроме того, кажется, что это то, что вы изначально планировали сделать так в заявлении return у вас есть plainText.toString(), и нет причин звонить по телефону toString(), если он уже есть String.

0

setCharAt in определено для StringBuilder или StringBuffer не для строк.

Чтобы изменить символ на строке, вам нужно прикрыть его либо массивом символов буфера или строительного буфера.

Char array - достойный подход для вас, поскольку вы играете с каждым персонажем.

Пойдите с помощью метода StringBuilder или StringBuffer, который будет легко кодировать, и читаемость кода также будет хорошей.

Использовать в зависимости от того, что вам удобно.