Java 替换字符串中的字母,但不替换已替换的字母
因此,我正在制作一个程序,将加密一条消息,然后解密它 这是我的加密代码:Java 替换字符串中的字母,但不替换已替换的字母,java,string,replace,Java,String,Replace,因此,我正在制作一个程序,将加密一条消息,然后解密它 这是我的加密代码: private static String encrypt(String str){ String string = str.toLowerCase(); String string1 = string.replace('a', 'c'); String string2 = string1.replace('b', 'v'); String string3
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”到“i”到“p”,那么“p”和“l”会再次切换。无论我如何在解密程序中移动数字,我都无法匹配这个系统,因为有些词它可以工作,但有些词它不能
我正在寻找一种方法,让系统知道它已经编辑了那封信并跳过它,有人有什么想法吗?你可以创建一个字符数组,其中包含加密版本的字符
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
的加密字符。
这里的一个假设是,源字符串将只包含set
[A-Za-z]
中的字符。如果它们有任何其他ASCII字符,您需要在for循环中处理它们。根据您的代码,新字符将不断被后续字符串替换。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;
}
私有静态字符串加密(字符串str){
String String=str.toLowerCase();
对于(int i=0;i
上述代码将找到每个字符,然后将其替换,但不会返回以重新替换已替换的字符。这是因为代码现在已完成替换,但它将再次更改,因为代码将继续执行代码,直到到达返回行 例: 我输入了字符串
Test
,然后系统运行,直到它看到这一行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
但是如果你想要答案,请查看其他答案,这个答案只是解释你的代码。是的,我明白你的意思。我得到了我的代码,但我只是想找到一个解决方案,如何使它跳过已经被替换的代码。谢谢。我只是在解释你的代码中的错误,我还说了
查看其他人的答案,只是为了让你知道其他人的答案是正确的,我只是在向你解释。我查看了你的代码,这是我的想法。说你正在用你现在拥有的“嗨”。是我还是会这样:string=“hi”;你得到“h”+“l”+“i”=hli?就第一个例子来说,你有hli(假设它没有把l作为第二个字符?),我只是不明白,如果我很愚蠢,我很抱歉。不,不,如果它找到“h”,它会从h+1的索引中创建一个子字符串,从下一个术语开始,然后将它附加到“l”中。我基本上是通过创建一个字符串来替换该字符,该字符串在要替换的术语之前包含所有术语,并添加新字符,后跟字符串中的剩余字母。我希望这能澄清你的问题。