Заполнить массив повторяющейся строкой - JAVA - PullRequest
0 голосов
/ 30 ноября 2018

Я реализую шифрование 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 голосов
/ 30 ноября 2018

Вы можете сделать это, зациклив оригинал 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']
...