在 Java 中创建凯撒密码

Creating Ceasar Cipher in Java

我目前正在开展一个项目,在该项目中,我将通过将文件作为输入然后向用户请求数字来创建 Ceaser Cipher。该数字用于将字母向前移动,因此如果输入的数字为 2,则 a 将变为 c。字母表是环绕的(因此如果字母是 z 并且输入是 2,则加密字母将是 b),程序将忽略非字母字符并继续向前。

我有一个我认为应该可行的解决方案,但我认为我遗漏了一些东西,因为输出不是我所期望的,也不应该是。我在下面包含了相关的代码部分

public static String encode(String content, int num){
    char[] contentArray = content.toCharArray();
    String encoded = "";
    for(int i = 0; i < contentArray.length; i++){
        char current = contentArray[i];
        if (current >= 'a' && current <='z' || current >= 'A' && current <= 'Z'){
            current = (char) (current + num);
            if (current > 'z' | current > 'Z'){
                current = (char) (current - 26);
            } else if (current < 'a' | current < 'A'){
                current = (char) (current + 26);
            }
            contentArray[i] = current;
            encoded = encoded + encoded.concat(Character.toString(contentArray[i]));
        } else {
            i++;
        }
    }
    return encoded;
}

上面是我的主要功能,它只是在调用此功能之前询问用户必要的输入。在这种情况下,字符串内容由以下字符组成:taco cat 1-349z 2

理论上,这应该return vceq ecv 1-349b 2,如果用户输入2作为num。不幸的是 return 以下...

\I\IK\I\IKW\I\IK\I\IKWI\I\IK\I\IKW\I\IK\I\IKWI\\I\IK\I\IKW\I\IK\I\IKWI\I\IK\I\IKW\I\IK\I\IKWI\b

...这显然是不正确的。我不知道我的代码出了什么问题,所以非常感谢任何帮助。谢谢!

试试这个

public static String encode(String enc, int offset) {
        offset = offset % 26 + 26;
        StringBuilder encoded = new StringBuilder();
        for (char i : enc.toCharArray()) {
            if (Character.isLetter(i)) {
                if (Character.isUpperCase(i)) {
                    encoded.append((char) ('A' + (i - 'A' + offset) % 26));
                } else {
                    encoded.append((char) ('a' + (i - 'a' + offset) % 26));
                }
            } else {
                encoded.append(i);
            }
        }
        return encoded.toString();
    }

用法

 System.out.println(encode("taco cat 1-349z", 2));