题解 | #字符串加解密#

字符串加解密

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

Java解法

  1. 字母采用和26取余的方法,数字采用和10取余的方法(0-9是10个数字,不是9个……)
  2. 转换大小写时用加加减减就很方便

使用的方法

  1. 'String.valueof(char[] cs)' 可以直接将字符数组转换为字符串

  2. foreach方法不能直接修改数组本身,其实它是每次循环都新建了一个新变量

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String needToEncrypt = in.next();
		String needToDecrypt = in.next();
		//System.out.println(-1%10);
		System.out.println(encrypt(needToEncrypt));
		System.out.println(decrypt(needToDecrypt));
	}
	
	public static String encrypt(String s) {
		char[] cs = s.toCharArray();
		//foreach拿到的不是元素本身,而是一个新变量,所以这里不能用foreach
		//除非新建一个StringBuilder
		for(int i=0;i<s.length();i++) {
			if(cs[i]>='a' && cs[i]<='z') {
				cs[i] = (char) ((cs[i]-'a'+1)%26 + 'A');
				//System.out.println(cs[i]);
			}else if(cs[i]>='A' && cs[i]<='Z') {
				cs[i] = (char) ((cs[i]-'A'+1)%26 + 'a');
			}else if(cs[i]>='0' && cs[i]<='9') {
				cs[i] = (char) ((cs[i]-'0'+1)%10 + '0');
				//0-9是10个数,不是9个!
			}
		}
		//System.out.println(cs);
		return String.valueOf(cs);
	}
	
	public static String decrypt(String s) {
		char[] cs = s.toCharArray();
		//foreach拿到的不是元素本身,而是一个新变量,所以这里不能用foreach
		//除非新建一个StringBuilder
		//注意减法要再加一个26或10,才可以正常循环起来
		for(int i=0;i<s.length();i++) {
			if(cs[i]>='a' && cs[i]<='z') {
				cs[i] = (char) ((cs[i]-'a'-1+26)%26 + 'A');
			}else if(cs[i]>='A' && cs[i]<='Z') {
				cs[i] = (char) ((cs[i]-'A'-1+26)%26 + 'a');
			}else if(cs[i]>='0' && cs[i]<='9') {
				cs[i] = (char) ((cs[i]-'0'-1+10)%10 + '0');
			}
		}
		//System.out.println(cs);
		return String.valueOf(cs);
	}
}
全部评论

相关推荐

12-02 16:21
中南大学 Java
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
评论
5
2
分享
牛客网
牛客企业服务