java“无法解析方法'setCharAt(int,char)'”

时间:2016-02-15 08:52:25

标签: java encryption error-handling compiler-errors

我正在尝试制作一个 Caesar密码,一切都应该正常工作,但我收到了一个错误。

这是我的加密方法:

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

查看setCharAt - &gt;您可以清楚地看到它属于StringBuilder而不是String

如果您想在String使用,可以先创建StringBuilder,然后在该对象上调用.toString()

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

这似乎是您最初计划在return语句中plainText.toString()所做的事情,并且如果已经toString(),则没有理由在那里调用String一个id开始。

答案 1 :(得分:1)

setCharAt已定义为StringBuilderStringBuffer而不是字符串。

更改字符串上的char,您必须将其转换为String缓冲区或构建器的char数组。

当你正在玩每个角色时,Char数组对你来说是一个不错的方法。

使用StringBuilder或StringBuffer方法,这将很容易编码,代码的可读性也会很好。

使用您认为合适的任何一种。