java - 实现 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);
解决方案
你可以区分lowercase
和uppercase
字母,因为界限不一样。在我的代码中,我使用了 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);
}
推荐阅读
- swift - UIScrollView contentOffset 在点击时重置
- javascript - MediaElementJS 播放器 + 重新加载 HLS 流 - 任何解决方案?
- java - 如何将 Java 对象从一个类传递到另一个类
- unity3d - 如何在 Unity 中使用纯 ECS(实体组件系统)添加自定义行为?
- ios - CollectionViewCell 中标签中的数据有时会在重新加载时刷新,有时则不会
- ios - 沿画线放置 UILabel
- react-native - 在子视图中获取 apollo 客户端以手动使用查询
- python - 获取嵌套字典中字典值的数量
- java - 从 url 读取 csv 文件
- r - 如何在软件 R 中没有“for”的情况下高效编程?