如何在java中循环替换字母?

时间:2017-09-07 17:28:27

标签: java

我正在编写一个将密文转换为明文的加密程序。通过字母的频率,我手动将所有密码的字母破解为明文,并且没有模式,所以我需要编写一个包含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语句放在这个语句中,或者将它们并列起来吗?

3 个答案:

答案 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将转换存储在键/值对中。