给字符串加密,输出密文,其实按照题目所说,只需要针对大小写字母加密,其他不变,那么就分三种情况:
1 输入的字符是大写,则变成小写再往后加1,除Z以外,其他字母都是原来的基础上偏移一位 c+33 ,Z的话直接输出a
2 输入的字符是小写,这里先把所有的小写字母放map里,然后采用流计算,获取到对应的key值,再从map中取到对应的数字
3 其他情况都输出原值
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String str = sc.nextLine(); char[] ch = str.toCharArray(); HashMap<String,Integer> map = new HashMap<>(); map.put("abc",2); map.put("def",3); map.put("ghi",4); map.put("jkl",5); map.put("mno",6); map.put("pqrs",7); map.put("tuv",8); map.put("wxyz",9); for(int i=0;i<ch.length;i++){ if(ch[i]>='a'&& ch[i]<='z'){ final Character cF =ch[i]; //流计算,从map中获得所有的key,成为一个set集合,然后看每个key值 //是否包含输入的这个字符,是的话,就随机打出来获取到这个key,然后再在map获取到值 String key = map.keySet().stream().filter(o->o.contains(cF.toString())).findAny().get(); System.out.print(map.get(key)); }else if(ch[i]>='A'&& ch[i]<='Z'){ if((ch[i]+32)=='z'){ System.out.print('a'); }else{ System.out.print((char)(ch[i]+33)); } }else{ System.out.print(ch[i]); } } } } }