替换Strings Java中的字符

时间:2014-03-18 23:04:32

标签: java string for-loop encryption switch-statement

我需要循环遍历字符串中的每个字符,并根据它的字符,将其替换为char数组中的另一个字符。

基本上它看起来像这样:

for (int k = 0; k < messageToBeEncrypted.length(); k++)
    {
        switch(messageToBeEncrypted.charAt(k))
        {
            case 'a' : messageToBeEncrypted.replace('a', cryptList[0]);
            break;
            case 'b' : messageToBeEncrypted.replace('b', cryptList[1]);
            break;
            //it keeps going for each letter of the alphabet

        }
        System.out.println(messageToBeEncrypted);

    }

char数组cryptList是一个随机生成的字母表,&#34; fgtaixnebqwjkzumlydrovsphc&#34; A由f替换,b由g替换,依此类推。我遇到的问题是此代码打印输入的完全相同的消息,因此如果messageToBeEncrypted是ab而不是fg,则打印ab。我怎样才能解决这个问题?如果有更清晰,更简洁的方法来实现这一点,请告诉我。我意识到26个案例陈述可能不是实现我的目标的最佳方式。

2 个答案:

答案 0 :(得分:0)

这似乎是关于你的事情(减去残酷的开关声明):

public static String substitutionCipher(String str) {
    //i'm assuming that this random alphabet is exactly 26 long, each unique
    char[] crypt = "fgtaixnebqwjkzumlydrovsphc".toCharArray();
    char[] chars = str.toCharArray();
    for(int i = 0; i < chars.length; i++){
        chars[i] = crypt[((int) chars[i]) - 97];
    }
    return new String(chars);
}

但是要回答你原来的问题,它不起作用的原因是字符串是不可变的。通过调用String.replace,它不会修改你的字符串;这实际上是返回字符串的修改版本然后消失,因为你没有存储返回值。 你需要说:

for (int k = 0; k < messageToBeEncrypted.length(); k++)
{
    switch(messageToBeEncrypted.charAt(k))
    {
        case 'a' : 
            messageToBeEncrypted = messageToBeEncrypted.replace('a', cryptList[0]);
            break;
        case 'b' : 
            messageToBeEncrypted = messageToBeEncrypted.replace('b', cryptList[1]);
            break;
        //etc.

    }
    System.out.println(messageToBeEncrypted);

}

但我之前提到的方式对记忆有点温和。

答案 1 :(得分:0)

如果您想谷歌,关键字是替换密码。

这是一个简短的帮助:

String messageToBeEncrypted = "HelloWorld".toLowerCase();
String alphabet = "fgtaixnebqwjkzumlydrovsphcab";
StringBuilder sb = new StringBuilder();
int pos; 
for (int k = 0; k < messageToBeEncrypted.length(); k++)
{
    pos = (messageToBeEncrypted.charAt(k) - 97);
    sb.append(alphabet.charAt(pos));
}

System.out.println(sb.toString());

数字97是ASCII表格中的偏移量...我的例子仅适用于小写字母,但每个字母的拼写并不难。