我一直试图在Java中创建一个凯撒密码模块,但是由于某些原因,该代码似乎无法正常工作。如果我删除if语句以检查其ASCII数字和键是否为字母,则不会输出任何内容,否则只会输出一些奇怪的字母。
我猜在所有转换之间,在字符和整数之间,数据之间的某个地方丢失了。
public static String caesarCipher(String text, int key) {
char[] charText = new char[text.length()];
for (int i = 0; i < text.length(); i++) charText[i] = text.charAt(i);
for (int i = 0; i < charText.length; i++) {
if (Character.isUpperCase(charText[i])) {
charText[i] = (char) (Character.getNumericValue(charText[i]) + key);
if (Character.getNumericValue(charText[i]) > 90)
charText[i] = (char) (Character.getNumericValue(charText[i]) - 26);
if (Character.getNumericValue(charText[i]) < 65)
charText[i] = (char) (Character.getNumericValue(charText[i]) + 26);
}
if (Character.isLowerCase(charText[i])) {
charText[i] = (char) (Character.getNumericValue(charText[i]) + key);
if (Character.getNumericValue(charText[i]) > 122)
charText[i] = (char) (Character.getNumericValue(charText[i]) - 26);
if (Character.getNumericValue(charText[i]) < 97)
charText[i] = (char) (Character.getNumericValue(charText[i]) + 26);
}
}
String finalText = new String(charText);
return finalText;
}
因此,首先,我将String对象复制到一个字符数组中。然后,我一一检查char数组的元素是大写还是小写。 在这两种情况下,该元素都将转换为其数值,然后将键的值添加到它的值,然后再转换回char元素。 如果数字加键的值大于或小于ASCII表中字母表示的数字,则该值将再次转换回其数字表示形式,并加或减26。 最后,将char数组转移到String对象中并返回。