题解 | #字符串加解密#

字符串加解密

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

import java.util.*;
import java.util.regex.Pattern;

/*
对输入的字符串进行加解密,并输出。
加密方法为:
当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;
当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;
其他字符不做变化。
解密方法为加密的逆过程。
数据范围:输入的两个字符串长度满足 1 \le n \le 1000 \1≤n≤1000  ,保证输入的字符串都是只由大小写字母或者数字组成
* */
public class Main{

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            System.out.println(encryption(sc.nextLine()));
            System.out.println(decrypt(sc.nextLine()));
        }
    }
    //加密
    private static String encryption(String str){
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Y') {
                sb.append((char) (str.charAt(i) + 1 + 32));
            } else if (str.charAt(i) == 'Z') {
                sb.append('a');
            } else if (str.charAt(i) >= 'a' && str.charAt(i) <= 'y') {
                sb.append((char) (str.charAt(i) + 1 - 32));
            } else if (str.charAt(i) == 'z') {
                sb.append('A');
            } else if (str.charAt(i) >= '0' && str.charAt(i) <= '8') {
                sb.append((char) (str.charAt(i) + 1));
            } else if (str.charAt(i) == '9') {
                sb.append('0');
            } else
                sb.append(str.charAt(i));
        }
            return String.valueOf(sb);
    }

    //解密
    private static String decrypt(String str){
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) >= 'B' && str.charAt(i) <= 'Z') {
                sb.append((char) (str.charAt(i) - 1 + 32));
            } else if (str.charAt(i) == 'A') {
                sb.append('z');
            } else if (str.charAt(i) >= 'b' && str.charAt(i) <= 'z') {
                sb.append((char) (str.charAt(i) - 1 + -32));
            } else if (str.charAt(i) == 'a') {
                sb.append('Z');
            } else if (str.charAt(i) >= '1' && str.charAt(i) <= '9') {
                sb.append((char) (str.charAt(i) - 1));
            } else if (str.charAt(i) == '0') {
                sb.append('9');
            } else
                sb.append(str.charAt(i));
        }
        return String.valueOf(sb);
    }
}
全部评论

相关推荐

最喜欢秋天的火龙果很...:第一份工作一定要往大的去,工资低点没事。后面换工作会更好找,即使你去小公司,你也不可能不会换工作的。所以找大的去
点赞 评论 收藏
分享
头像
03-03 13:17
已编辑
苏州大学 Java
面试官真的很有耐心,人非常nice,但问得也是真的很细。面完半小后约HR面。有没有人说说HR面会问啥?【希望能过吧,以前真没想到面个试这么耗精力,这一周感觉都被掏空了】1.请做一下自我介绍。2.你掌握的数据结构有哪些?3.请讲一下一致性哈希的原理和解决的问题。4.请讲一下Ring&nbsp;buffer(环形缓冲区)的相关内容。5.请讲解一下HTTP状态码的相关分类和含义(如2xx、3xx、4xx、5xx)。6.请讲解一下四层网络负载均衡和七层网络负载均衡的区别,以及各自的应用场景。7.请讲一下反向代理的原理和常用工具,以及正向代理的相关内容。8.进程间通信的方式有哪些?哪种方式效率更高,为什么?9.请讲一下MySQL主从复制的实现原理(基于binlog、redolog相关)。10.多个从节点之间出现数据不一致的问题该如何解决?11.你了解的消息中间件有哪些?RabbitMQ、RocketMQ、Kafka这三种消息中间件的区别是什么?12.Redis中最常用的数据结构有哪些?13.请讲一下Redis中Zset(sorted&nbsp;set)的底层实现和优化策略。14.什么是小哈希和大哈希,二者在查找、插入性能上有什么区别?15.请讲一下TCC分布式事务算法的相关内容,以及它和2PC、3PC的区别。16.你在项目中使用的服务发现组件是什么,它的实现原理是什么?17.你在项目中使用的序列化协议是什么,为什么选择该协议?18.长连接的适用场景是什么?哪些场景不适合使用长连接,原因是什么?19.请设计一个评论系统(包括数据库表设计、数据结构、关联关系等)。20.【反问】想具体知道会做哪些模块的工作?有没有导师?
百特曼3:节子还是一如既往的八股大厂
查看78道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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