借用了map 来完成 不使用阿斯克码
package demo3;
import java.util.HashMap;
import java.util.Scanner;
public class demo3 {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("a", "0"); map.put("A", "26"); map.put("b", "1"); map.put("B", "27"); map.put("c", "2");
map.put("C", "28"); map.put("d", "3"); map.put("D", "29"); map.put("e", "4"); map.put("E", "30");
map.put("f", "5"); map.put("F", "31"); map.put("g", "6"); map.put("G", "32"); map.put("h", "7");
map.put("H", "33"); map.put("i", "8"); map.put("I", "34"); map.put("j", "9"); map.put("J", "35");
map.put("k", "10"); map.put("K", "36"); map.put("l", "11"); map.put("L", "37"); map.put("m", "12");
map.put("M", "38"); map.put("n", "13"); map.put("N", "39"); map.put("o", "14"); map.put("O", "40");
map.put("p", "15"); map.put("P", "41"); map.put("q", "16"); map.put("Q", "42"); map.put("r", "17");
map.put("R", "43"); map.put("s", "18"); map.put("S", "44"); map.put("t", "19"); map.put("T", "45");
map.put("u", "20"); map.put("U", "46"); map.put("v", "21"); map.put("V", "47"); map.put("w", "22");
map.put("W", "48"); map.put("x", "23"); map.put("X", "49"); map.put("y", "24"); map.put("Y", "50");
map.put("z", "25"); map.put("Z", "51"); map.put("0", "a"); map.put("1", "b"); map.put("2", "c");
map.put("3", "d"); map.put("4", "e"); map.put("5", "f"); map.put("6", "g"); map.put("7", "h");
map.put("8", "i"); map.put("9", "j"); map.put("10", "k"); map.put("11", "l"); map.put("12", "m");
map.put("13", "n"); map.put("14", "o"); map.put("15", "p"); map.put("16", "q"); map.put("17", "r");
map.put("18", "s"); map.put("19", "t"); map.put("20", "u"); map.put("21", "v"); map.put("22", "w");
map.put("23", "x"); map.put("24", "y"); map.put("25", "z"); map.put("26", "A"); map.put("27", "B");
map.put("28", "C"); map.put("29", "D"); map.put("30", "E"); map.put("31", "F"); map.put("32", "G");
map.put("33", "H"); map.put("34", "I"); map.put("35", "J"); map.put("36", "K"); map.put("37", "L");
map.put("38", "M"); map.put("39", "N"); map.put("40", "O"); map.put("41", "P"); map.put("42", "Q");
map.put("43", "R"); map.put("44", "S"); map.put("45", "T"); map.put("46", "U"); map.put("47", "V");
map.put("48", "W"); map.put("49", "X"); map.put("50", "Y"); map.put("51", "Z");
System.out.println("请输入字符串:");
Scanner sc = new Scanner(System.in);// 键盘输入
String mingwen = sc.nextLine();
char[] mingwen1 = mingwen.toCharArray();
boolean asd = true;// asd用来表示是否包含其他不规范字符
asd=match(mingwen);
if (asd == false) {
System.out.println("输入类型错误");
} else {
Scanner sc1 = new Scanner(System.in);
System.out.println("请输入密钥:(密钥为小写的连续的字母)");
String my1 = sc1.nextLine();
char[] my2 = my1.toCharArray();// 把字符串拆分为字符到数组
boolean asd1 = true;
asd1=match2(my1);
if (asd1 == false) {
System.out.println("输入类型错误");
}else{
while (true) {
// 主页面
System.out.println("```!!!加密and解密!!!```");
System.out.println("1、加密选项");
System.out.println("2、解密选项");
System.out.println("3、加密且解密,我也不知道你想干啥");
System.out.println("4、退出");
System.out.println("请做出你的选择:(请输入数字1、2、3、4且4为退出)");
Scanner sc2 = new Scanner(System.in);
int choice = sc2.nextInt();
switch (choice) {
case 1:// 加密
jiamidemo(mingwen1, map, my2);
break;
case 2:// 解密
jiemidemo(mingwen1, map, my2);
break;
case 3:
char[] arr = jiamidemo(mingwen1, map, my2);
jiemidemo(arr, map, my2);
break;
case 4:// 退出
default:
System.out.println("谢谢你的使用,有缘再见");
System.exit(0);
break;
}
}
}
}
}
private static char[] jiamidemo(char[] mingwen1,
HashMap<String, String> map, char[] my2) {// 加密方法
// TODO Auto-generated method stub
char[] arr = new char[mingwen1.length];// 创建数组来装密文
int ii = 0;
for (int i = 0; i < mingwen1.length; i++) {
if ((mingwen1[i]) == ' ') {
arr[i] = ' '; // 空格填充
} else {
String s2 = String.valueOf(mingwen1[i]);
int mw = Integer.parseInt(map.get(s2));// 强转为int
String s3 = String.valueOf(my2[ii % (my2.length)]);
int my = Integer.parseInt(map.get(s3));// 强转为int
int demo1=0;
if(mw>25){
demo1 =(mw + my) % 26+26;
}else{
demo1 = (mw + my) % 26;
}
String s = String.valueOf(demo1);
char a1 = (map.get(s)).charAt(0);// 把拿到的字符转化为char类型
arr[i] = a1;// 经过循环把密文依次放进数组中
ii++;
}
}
System.out.print("加密后密文是:");
System.out.println(arr);
return arr;
}
private static void jiemidemo(char[] mingwen1, HashMap<String, String> map,
char[] my2) {// 解密方法
// TODO Auto-generated method stub
char[] arr = new char[mingwen1.length];// 创建数组来装密文
int ii = 0;
for (int i = 0; i < mingwen1.length; i++) {
if ((mingwen1[i]) == ' ') {
arr[i] = ' '; // 空格填充
} else {
String s2 = String.valueOf(mingwen1[i]);
int mw = Integer.parseInt(map.get(s2));// 强转为int
String s3 = String.valueOf(my2[ii % (my2.length)]);
int my = Integer.parseInt(map.get(s3));// 强转为int
int demo1=0;
if(mw>25){
demo1 = (mw - my + 26) % 26+26;
}else{
demo1 = (mw - my + 26) % 26;
}
ii++;
String s = String.valueOf(demo1);
char a1 = (map.get(s)).charAt(0);// 把拿到的字符转化为char类型
arr[i] = a1;// 经过循环把密文依次放进数组中
}
}
System.out.print("解密后明文是:");
System.out.println(arr);
}
public static boolean match(String str) {//正则表达式 校验字符串
String regex = "^[a-zA-Z\\s]+$";
return str.matches(regex);
}
private static boolean match2(String my1) {//校验密钥
// TODO Auto-generated method stub
String regex = "^[a-z]+$";
return my1.matches(regex);
}
}
来自17网工杨森