我正在尝试制作一个 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
我该如何解决这个问题?
答案 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
已定义为StringBuilder
或StringBuffer
而不是字符串。
更改字符串上的char,您必须将其转换为String缓冲区或构建器的char数组。
当你正在玩每个角色时,Char数组对你来说是一个不错的方法。
使用StringBuilder或StringBuffer方法,这将很容易编码,代码的可读性也会很好。
使用您认为合适的任何一种。