我必须实现一个名为"encodeCaesar";在"类"中;Functionality.java";,它使用Caesar加密对文本进行编码,我是Java 的新手
签名:encodeCaesar(字符串s,int val(:字符串。
该方法获取一个字符串值和一个整数值作为输入参数。字符串值中的字母(字符(将按整数值进行移位。为了简单起见,我可以假设只有字母,没有空格、数字或特殊字符。
在执行加密之前,应将字符串值转换为小写。该方法应返回一个字符串,其中每个字母已根据指定的整数值移动。
示例:CCD_ 1返回";df";。如果给定的整数值小于0或大于26,则应返回一个空字符串。
public class Functionality {
public static void main(String[]args({
}
公共静态字符串caesar(字符串s,int val({
char[] newString = s.toCharArray();
for(int i = 0; i < s.length(); i++){
int newChar = newString[i]+val;
while(newChar > 65+26) // 65 = A, 26 = number of letters in the alphabet
newChar -= 26;
newString[i] = (char) (newChar);
您可以区分lowercase
和uppercase
字母,因为绑定不相同。在我的代码中,我使用了两个循环,每种情况一个,如果它是自己的上界,就会减少值。对于您处于限制范围内的情况(使用负val
(,在创建newChar
时只需要+26
public static String caesar(String s, int val) {
char[] newString = s.toCharArray();
for (int i = 0; i < s.length(); i++) {
int newChar = newString[i] + val + 26;
// Handle uppercase letters
while (Character.isUpperCase(newString[i]) && newChar >= 65 + 26) {
newChar -= 26;
}
// Handle lowecase letters
while (Character.isLowerCase(newString[i]) && newChar >= 97 + 26) {
newChar -= 26;
}
newString[i] = (char) (newChar);
}
return String.valueOf(newString);
}
测试
System.out.println(caesar("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 3).equals("DEFGHIJKLMNOPQRSTUVWXYZABC"));
System.out.println(caesar("ABCDEFGHIJKLMNOPQRSTUVWXYZ", -3).equals("XYZABCDEFGHIJKLMNOPQRSTUVW"));
要将输入视为lowercase
,请删除大写部分并添加.toLowerCase()
public static String caesar(String s, int val) {
char[] newString = s.toLowerCase().toCharArray();
for (int i = 0; i < s.length(); i++) {
int newChar = newString[i] + val + 26;
// Handle lowecase letters
while (Character.isLowerCase(newString[i]) && newChar >= 97 + 26) {
newChar -= 26;
}
newString[i] = (char) (newChar);
}
return String.valueOf(newString);
}