所以我正在创建一个程序来加密消息,然后解密它。
这是我的加密代码:
private static String encrypt(String str){
String string = str.toLowerCase();
String string1 = string.replace('a', 'c');
String string2 = string1.replace('b', 'v');
String string3 = string2.replace('c', 'n');
String string4 = string3.replace('d', 'm');
String string5 = string4.replace('e', 'u');
String string6 = string5.replace('f', 'd');
String string7 = string6.replace('g', 'o');
String string8 = string7.replace('h', 'l');
String string9 = string8.replace('i', 'p');
String string10 = string9.replace('j', 'e');
String string11 = string10.replace('k', 'q');
String string12 = string11.replace('l', 'k');
String string13 = string12.replace('m', 'a');
String string14 = string13.replace('n', 't');
String string15 = string14.replace('o', 'j');
String string16 = string15.replace('p', 'f');
String string17 = string16.replace('q', 's');
String string18 = string17.replace('r', 'g');
String string19 = string18.replace('s', 'w');
String string20 = string19.replace('t', 'b');
String string21 = string20.replace('u', 'y');
String string22 = string21.replace('v', 'i');
String string23 = string22.replace('w', 'x');
String string24 = string23.replace('x', 'r');
String string25 = string24.replace('y', 'z');
String string26 = string25.replace('z', 'h');
return string26;
}
以字母h和i为例。如果你查看我的笔记和代码,你可能认为它应该输出:" lp"但是,因为如果你仔细观察' h'到了' l'到了'我'到了' p' ' p'并且' l'再次切换。无论我如何移动解密器中的数字,我都无法匹配这个系统,有些单词可以使用,但与其他单词无关。
我正在寻找一种方法让系统知道它已经编辑了那封信并跳过它,是否有人有 任何 的想法?
答案 0 :(得分:4)
您可以创建一个字符数组,将字符a
的加密版本保存到z
。
char [] encryptChars = new char[]{'c', 'v', .... 'h'};
private static String encrypt(String str){
StringBuilder stringBuilder = new StringBuilder();
String s = str.toLowerCase();
for(char c : s.toCharArray()) {
stringBuilder.append(encryptChars[c - 'a']);
}
return stringBuilder.toString();
}
encryptChars
按顺序保存a
到z
的加密字符。
这里假设源字符串只包含集合[A-Za-z]
中的字符。如果它们有任何其他ASCII字符,则需要在 for 循环中处理它们。
答案 1 :(得分:0)
根据您的代码,您的新角色会被后续的string.replace调用所取代。相反,你可以做这样的事情:
private static String encrypt(String str){
String string = str.toLowerCase();
for(int i = 0; i < string.length(); i++)
{
char ch = string.charAt(i);
switch(ch)
{
case 'h':
{
string = string.substring(0,i)+"l"+string.substring(i+1);
break;
}
case 'i':
{
string = string.substring(0,i)+"p"+string.substring(i+1);
break;
}
default:
{
System.out.println("Enter a-z");
break;
}
}
}
return string;
}
上面的代码会找到每个字符然后替换它,但不会再返回重新替换已经替换的字符。
答案 2 :(得分:0)
这是因为代码现在已经完成替换,但它会再次更改它,因为代码会继续执行代码,直到它到达return
行。
例如:
我输入了字符串Test
,系统会一直运行,直到看到这一行String string20 = string19.replace('t', 'b');
,这意味着字母t
变成了b
,但是系统甚至不关心哪个字母是第一个和最后一个,它会检查整个字符串Test
是否有。
如果我这样做
String oldString = "test";
String newString = oldString.replace("a", "b").replace("b", "c").....replace("y", "z");
System.out.println(newString);
输出是这样的:
zzzz
但是如果你想要答案,请查看其他答案,这个答案只是解释你的代码。