实现编码器Caesar



我必须实现一个名为"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);

您可以区分lowercaseuppercase字母,因为绑定不相同。在我的代码中,我使用了两个循环,每种情况一个,如果它是自己的上界,就会减少值。对于您处于限制范围内的情况(使用负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);
}

相关内容

  • 没有找到相关文章

最新更新