题解 | #字符串加解密#
字符串加解密
http://www.nowcoder.com/practice/2aa32b378a024755a3f251e75cbf233a
Java解法
- 字母采用和26取余的方法,数字采用和10取余的方法(0-9是10个数字,不是9个……)
- 转换大小写时用加加减减就很方便
使用的方法
-
'String.valueof(char[] cs)' 可以直接将字符数组转换为字符串
-
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);
}
}