我正在编写一个将密文转换为明文的加密程序。通过字母的频率,我手动将所有密码的字母破解为明文,并且没有模式,所以我需要编写一个包含26次的循环,将字符串中的每个字母转换为另一个字母。
我的第一次尝试是在java中使用replace语句, 这将是这样的
str=str.replaceAll("A","E");
问题是,例如,我输入了一个像abc
这样的字符串
并且我的密钥将是这样的“用c替换a,用p替换b,用q替换c”。
我想要的输出应该是cpq
,但我得到的输出是qpq
。
这意味着我希望它像一次转换。
所以我尝试使用if
来使用循环我这样做的方式是:
for (i=1;i<string.length;i++)
if (char[i]=="a")
char [i] ="b";
错误告诉我,我无法将字符串转换为char。 而且,我想问一下,如果我把其他25个if语句放在这个语句中,或者将它们并列起来吗?
答案 0 :(得分:4)
要回答问题的第二部分:我不会在您的循环中添加25个单if
个语句,而是使用Map<Character, Character>
来存储您的替换。
完整的解决方案可能如下所示:
public static void main(String[] args) {
Map<Character, Character> replacements = new HashMap<>();
replacements.put('a', 'c');
replacements.put('b', 'p');
replacements.put('c', 'q');
String input = "abcd";
StringBuilder output = new StringBuilder();
for (Character c : input.toCharArray()) {
output.append(replacements.getOrDefault(c, c));
}
System.out.println(output.toString());
}
这样可以保留您无法替换的角色。输出:
cpqd
答案 1 :(得分:3)
你可以解决这个问题:
String str = "abc";
char [] ch = str.toCharArray();
for(int i=0; i<str.length(); i++){
if('a'==str.charAt(i)){
ch[i] = 'c';
}
if('b'==str.charAt(i)){
ch[i] = 'p';
}
if('c'==str.charAt(i)){
ch[i] = 'q';
}
}
System.out.println(String.valueOf(ch));
答案 2 :(得分:2)
您无法将String转换为char。所以你需要使用所有字符串或所有字符。您可以使用单引号作为字符串,而不是使用String的双引号:
char[i]=='b'
和
char[i] = 'b';
此外,您可以使用switch语句,而不是使用long if / else语句,甚至可以创建并使用Map将转换存储在键/值对中。