首页 > 解决方案 > 实现 encodeCaesar

问题描述

我必须在“Functionality.java”类中实现一个名为“encodeCaesar”的静态公共方法,该方法使用凯撒加密对文本进行编码,我是一个完整的 Java 新手

签名:encodeCaesar(String s, int val):字符串。

该方法获取一个字符串值和一个整数值作为输入参数。字符串值中的字母(字符)将移动整数值。为简单起见,我可以假设只有字母,没有空格、数字或特殊字符。

在执行加密之前,字符串值应转换为小写。该方法应返回一个字符串,其中每个字母已根据指定的整数值移动。

示例:encodeCaesar("Ac",3)返回“df”。如果给定的整数值小于 0 或大于 26,则应返回空字符串。

public class Functionality {

公共静态无效主要(字符串[]参数){

}

    

公共静态字符串凯撒(字符串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);

标签: javaarraysstringcharcaesar-cipher

解决方案


你可以区分lowercaseuppercase字母,因为界限不一样。在我的代码中,我使用了 2 个循环,每种情况一个循环,如果它的上限是它自己的界限,它会减小值。对于您受限制的情况(使用负数val),您只需要+26在创建时newChar

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);
}

推荐阅读