题解 | #字符串加解密#

字符串加解密

https://www.nowcoder.com/practice/2aa32b378a024755a3f251e75cbf233a

有点像凯撒密码,移位+取模,但是需要分类讨论。

值得注意的是:对于减法取模,为了保证不是负数,要记得加上模数后取模。

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            char[] plain = in.next().toCharArray();
            char[] cipher = in.next().toCharArray();

            for (int i = 0; i < plain.length; i++) {
                char ch = plain[i];
                if (Character.isLetterOrDigit(ch)) {
                    if (Character.isLetter(ch)) {
                        if (Character.isLowerCase(ch)) {
                            // a-z
                            ch = Character.toTitleCase((char) (((ch - 'a') + 1) % 26 + 'a'));
                        } else {
                            // A-Z
                            ch = Character.toLowerCase((char) (((ch - 'A') + 1) % 26 + 'A'));
                        }
                    } else {
                        // 0-9
                        ch = (char) (((ch - '0') + 1) % 10 + '0');
                    }
                    plain[i] = ch;
                }
            }
            System.out.println(String.valueOf(plain));

            for (int i = 0; i < cipher.length; i++) {
                char ch = cipher[i];
                if (Character.isLetterOrDigit(ch)) {
                    if (Character.isLetter(ch)) {
                        if (Character.isLowerCase(ch)) {
                            // a-z
                            ch = Character.toTitleCase((char) (((ch - 'a') + 26 - 1) % 26 + 'a'));
                        } else {
                            // A-Z
                            ch = Character.toLowerCase((char) (((ch - 'A') + 26 - 1) % 26 + 'A'));
                        }
                    } else {
                        // 0-9
                        ch = (char) (((ch - '0') + 10 - 1) % 10 + '0');
                    }
                    cipher[i] = ch;
                }
            }
            System.out.println(String.valueOf(cipher));

        }
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
06-20 21:22
已编辑
门头沟学院 Java
纯真的河老师在喝茶:答应了就跑啊,实习随便跑啊,别被pua了,md就是找个廉价劳动力,还平稳过度正式工,到时候跟你说没转正
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务