用重复的字符串填充数组-JAVA

时间:2018-11-30 01:22:06

标签: java vigenere

我正在实施Vigenere加密,可以说我有一个 String称为key,其值例如为“ KEY”

我想用该字符串填充char数组,其大小为plainText

例如,我有一个纯文本“ JAVA IS BEST”,取决于Array的字符plaintext将是:

input: ['J','A','V','A',' ','I','S',' ','B','E','S','T']

output: ['K','E','Y','K',' ','E','Y',' ','K','E','Y','K']

我如何在上面制作相同的输出数组?

1 个答案:

答案 0 :(得分:1)

您可以通过在原始char[]上循环来完成此操作,如果给定字符不是空格,则将对应的键字母复制到char[]的匹配索引中返回。您可以使用%运算符找到密钥的匹配字母。您遇到的问题是,如果i处的字符等于一个空格,i将仍然递增,并且您将跳过key的字母。要解决此问题,您可以添加一个额外的计数器变量:

public static char[] foo(char[] arr) {
    String key = "KEY";
    char[] copy = new char[arr.length];
    for(int i = 0, index = 0; i < arr.length; i++) {
        if(arr[i] != ' ') {
            copy[i] = key.charAt(index++ % key.length());
        } else {
            copy[i] = ' ';
        }
    }
    return copy;
}

输出:

['K','E','Y','K',' ','E','Y',' ','K','E','Y','K']