题解 | #字符串加解密#
字符串加解密
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)); } } }