凯撒密码 Space 个字符保持不变
Caesar Cipher With Space characters left unchanged
我试图让加密函数忽略白色 spaces 和来自 UserInput 的单词之间的符号。我应该使用 isWhitespace
还是什么?以及如何实施?
这个程序的输出是完全正确的,它将每个字母移动到下一个 7 个字母。但它不接受由 space 或逗号分隔的移动 2 个单词。
我是 Java 令人惊叹的世界的新手,我真的很喜欢它!因此,这是我开始工作后的第三周。
import java.util.Scanner;
public class Test_Cipher{
public static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
public static String encrypt(String plainText, int shiftKey) {
plainText = plainText.toLowerCase();
String cipherText = "";
for (int i = 0; i < plainText.length(); i++) {
int charPosition = ALPHABET.indexOf(plainText.charAt(i));
int keyVal = (shiftKey + charPosition) % 26;
char replaceVal = ALPHABET.charAt(keyVal);
cipherText += replaceVal;
}
return cipherText;
}
}
有两种方法可以做到这一点:为角色创建正匹配或负匹配。在正匹配变体中,您首先检查 plainText.charAt(i)
是否是您要保留的字符,在这种情况下,将其添加到 cipherText
和 continue
循环中。
在另一个中,您可以检查是否 indexOf
returns -1
表明字母表不包含该字符。在那种情况下,你做同样的事情:添加它并继续。这是我见过的经典 Ceasar "play" 密码的常用方法:
// introduce a local variable, you don't want to perform charAt twice
char c = plainText.charAt(i);
int charPosition = ALPHABET.indexOf(c);
// if charPositions is -1 then it is not found
if (charPosition == -1) { // or define a constant NOT_FOUND = -1
cipherText += c;
// continue with the for loop
continue;
}
我试图让加密函数忽略白色 spaces 和来自 UserInput 的单词之间的符号。我应该使用 isWhitespace
还是什么?以及如何实施?
这个程序的输出是完全正确的,它将每个字母移动到下一个 7 个字母。但它不接受由 space 或逗号分隔的移动 2 个单词。
我是 Java 令人惊叹的世界的新手,我真的很喜欢它!因此,这是我开始工作后的第三周。
import java.util.Scanner;
public class Test_Cipher{
public static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
public static String encrypt(String plainText, int shiftKey) {
plainText = plainText.toLowerCase();
String cipherText = "";
for (int i = 0; i < plainText.length(); i++) {
int charPosition = ALPHABET.indexOf(plainText.charAt(i));
int keyVal = (shiftKey + charPosition) % 26;
char replaceVal = ALPHABET.charAt(keyVal);
cipherText += replaceVal;
}
return cipherText;
}
}
有两种方法可以做到这一点:为角色创建正匹配或负匹配。在正匹配变体中,您首先检查 plainText.charAt(i)
是否是您要保留的字符,在这种情况下,将其添加到 cipherText
和 continue
循环中。
在另一个中,您可以检查是否 indexOf
returns -1
表明字母表不包含该字符。在那种情况下,你做同样的事情:添加它并继续。这是我见过的经典 Ceasar "play" 密码的常用方法:
// introduce a local variable, you don't want to perform charAt twice
char c = plainText.charAt(i);
int charPosition = ALPHABET.indexOf(c);
// if charPositions is -1 then it is not found
if (charPosition == -1) { // or define a constant NOT_FOUND = -1
cipherText += c;
// continue with the for loop
continue;
}