替换密码技术,其中每个字母都用字母行下方的一个7个字母替换

时间:2019-06-02 09:49:19

标签: java

我正在使用替换密码技术,其中每个字母在字母行下被一个7个字母替换。如果输入单词之间出现空格,则在输出中也必须出现空格。

class Cipher 
{ 
    public static StringBuffer encrypt(String text, int s) 
    { 
        StringBuffer result= new StringBuffer(); 
        for (int i=0; i<text.length(); i++) 
        { 
            if (Character.isUpperCase(text.charAt(i))) 
            { 
                char ch = (char)(((int)text.charAt(i)+s));
                result.append(ch); 
            } 
            else
            { 
                char ch = (char)(((int)text.charAt(i)+s)); 
                result.append(ch); 
            } 
        } 
        return result; 
    } 
    public static void main(String[] args) 
    { 
        String text = "zhcl dhaly"; 
        int s = -7; 
        System.out.println("Text : " + text); 
        System.out.println("Cipher: " + encrypt(text, s)); 
    } 
} 

它将正确的输出显示为harini。但是,如果我输入“ Zhcldhaly”,则会显示“ sa \ e] aZer”。但是正确的输出是“节水”。

2 个答案:

答案 0 :(得分:1)

尝试使用模数来包裹任何字符,这些字符在移位时会超出字母z

StringBuilder result = new StringBuilder();
int s = 7;
String text = "Zhcldhaly";
for (int i=0; i < text.length(); i++) {
    char chr = text.charAt(i);
    if (chr == ' ') {
        result.append(" ");
    }
    else if (Character.isUpperCase(chr)) {
        char ch = (char)('A' + (chr - 'A' - s + 26) % 26);
        result.append(ch);
    }
    else {
        char ch = (char)('a' + (chr - 'a' - s + 26) % 26);
        result.append(ch);
    }
}

System.out.println(result);

这将输出:

Savewater

答案 1 :(得分:0)

我假设您在抱怨sa\e]aZer,或者确切地说:那里没有空间,这不是您的作业所能动摇的。

事情是:

 if (Character.isUpperCase(text.charAt(i))) 

仅检查字符是否为大写。它不会检查char是否为空格。

这非常简单:您需要一个if语句,其内容为:if space, then append space else "translate"

还请注意:当前代码中的if语句是没有意义的。当您仔细查看“ then”和“ else”的情况时,您会发现它们相同

因此,长话短说:仔细查看所需的 if 语句,并相应地更改代码。仔细研究ASCII表以更好地了解您的输入字符期望什么样的输出,对您也可能非常有帮助。

除此之外:您应该了解解密和加密之间的区别!当您尝试取回原始文本时,您必须撤消操作!当减去7进行加密时,您需要添加 7进行解密。您不能使用 encrypt 方法解密加密的单词!