我正在实施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']
我如何在上面制作相同的输出数组?
答案 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']