我正在尝试用Java解决Caesar的Cipher,但是有一个转折。输入的字符串包含字母数字值,我无法解决。到目前为止,这是我尝试过的事情:
String rotationalCipher(String input, int rotationFactor) {
// Write your code here
StringBuilder sb = new StringBuilder();
for(int i = 0; i < input.length(); i++) {
if(Character.isLowerCase(input.charAt(i))) {
char ch = (char)(((int)input.charAt(i) + rotationFactor - 97) % 26 + 97);
} else if (Character.isUpperCase(input.charAt(i))) {
char ch = (char)(((int)input.charAt(i) + rotationFactor - 65) % 26 + 65);
sb.append(ch);
} else {
char ch = (char)(((int)input.charAt(i) + rotationFactor - 48) % 10 + 48);
sb.append(ch);
}
}
return sb.toString();
}
我想做的是使用其ASCII值评估每种情况,但我似乎没有获得所需的输出。我使用ASCII错误吗?感谢您的帮助!
Sample input/output:
input = Zebra-493?
rotationFactor = 3
output = Cheud-726?
您有两个主要问题。
StringBuilder
更新append
以进行小写转换。isDigit
特别处理数字,以便随后可以忽略-和?之类的字符一些建议。
ch
。一旦进行了这些更改,您的代码就可以正常工作。