HJ21 简单密码
描述
现在有一种密码变换算法。
九键手机键盘上的数字与字母的对应: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.
而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。
数字和其它的符号都不做变换。
数据范围: 输入的字符串长度满足 1≤𝑛≤100 1≤n≤100
输入描述:
输入一组密码,长度不超过100个字符。
输出描述:
输出密码变换后的字符串
示例:
输入:YUANzhi1987 输出:zvbo9441987
分析:
1.分区,分为小写字母,大写字母和数字。
2.再分别进行处理。
代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s=sc.nextLine();
if(s.length()>101){
System.out.println("非法输入!");
return;
}
char c;
String ss="";
for (int i = 0; i < s.length(); i++) {
c=s.charAt(i);
if(c>='a'&&c<='z'){
switch (c){
case 'a': case 'b': case 'c':ss+=2;break;
case 'd': case 'e': case 'f':ss+=3;break;
case 'g': case 'h': case 'i':ss+=4;break;
case 'j': case 'k': case 'l':ss+=5;break;
case 'm': case 'n': case 'o':ss+=6;break;
case 'p': case 'q': case 'r': case 's':ss+=7;break;
case 't': case 'u': case 'v':ss+=8;break;
case 'w': case 'x': case 'y': case 'z':ss+=9;break;
default:
System.out.println("非法数据!");
}
}else if(c>='A'&&c<='Z'){
if(c=='Z'){
ss+='a';
}else {
ss+=(char)(c+32+1);
}
}else if(c>='0'&&c<='9'){
ss+=c;
}
}
System.out.println(ss);
}
}
大佬代码:
使用HashMap进行存储。
使用contains判断是否包括某字母。
import java.util.*;
public class Main{
//定义map容器存储按键对应数字字符的容器
private static Map<String,String> map = new HashMap<>();
//静态初始化、加载map容器
static{
map.put("1","1");
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");
map.put("0","0");
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
String str = scanner.nextLine();
char[] chars = str.toCharArray();
//构造buffer容器存储转换后的字符串
StringBuffer buffer = new StringBuffer();
for(char c : chars){
//如果是正整数则不需要进行加密
if(c>='0'&& c<='9'){
buffer.append(String.valueOf(c));
}else if(c>='A'&& c<='Y'){ //如果是A~Y的大写字母则需要将其+32位转换成小写再向后移1位
char newChar = (char)(c+32+1);
buffer.append(String.valueOf(newChar));
}else if(c=='Z'){ //如果是Z则加密成a
buffer.append("a");
}else{
//去除map容器中的key与字符进行校验并加密
Set<String> keys = map.keySet();
for(String k : keys){
if(k.contains(String.valueOf(c)))
buffer.append(map.get(k));
}
}
}
System.out.print(buffer.toString());
}
}
}
全使用if语句。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
char c[] = str.toCharArray();
for(int i = 0; i<str.length() ; i++){
if(c[i]>='A'&&c[i]<='Z'){
if(c[i]+32 != 'z')
c[i] += 33;
else
c[i] = 'a';
}
else if(c[i]=='a'||c[i]=='b'||c[i]=='c')
c[i]='2';
else if(c[i]=='d'||c[i]=='e'||c[i]=='f')
c[i]='3';
else if(c[i]=='g'||c[i]=='h'||c[i]=='i')
c[i]='4';
else if(c[i]=='j'||c[i]=='k'||c[i]=='l')
c[i]='5';
else if(c[i]=='m'||c[i]=='n'||c[i]=='o')
c[i]='6';
else if(c[i]=='p'||c[i]=='q'||c[i]=='r'||c[i]=='s')
c[i]='7';
else if(c[i]=='t'||c[i]=='u'||c[i]=='v')
c[i]='8';
else if(c[i]=='w'||c[i]=='x'||c[i]=='y'||c[i]=='z')
c[i]='9';
System.out.print(c[i]);
}
System.out.println();
}
}
分段判断。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNextLine()){
String cleartext = in.nextLine(); //读取明文
StringBuilder builder = new StringBuilder();
for(int i=0; i < cleartext.length(); i++){
//小写字母转换为数字
if(cleartext.charAt(i)>='a' && cleartext.charAt(i)<='c')
builder.append('2');
else if(cleartext.charAt(i)>='d' && cleartext.charAt(i)<='f')
builder.append('3');
else if(cleartext.charAt(i)>='g' && cleartext.charAt(i)<='i')
builder.append('4');
else if(cleartext.charAt(i)>='j' && cleartext.charAt(i)<='l')
builder.append('5');
else if(cleartext.charAt(i)>='m' && cleartext.charAt(i)<='o')
builder.append('6');
else if(cleartext.charAt(i)>='p' && cleartext.charAt(i)<='s')
builder.append('7');
else if(cleartext.charAt(i)>='t' && cleartext.charAt(i)<='v')
builder.append('8');
else if(cleartext.charAt(i)>='w' && cleartext.charAt(i)<='z')
builder.append('9');
//大写字母'A'~'Y'转换
else if(cleartext.charAt(i)>='A' && cleartext.charAt(i)<='Y')
builder.append((char)(cleartext.charAt(i)+'a'-'A'+1));
//大写字母'Z'单独处理
else if(cleartext.charAt(i) == 'Z')
builder.append('a');
//其他字符不做变换
else
builder.append(cleartext.charAt(i));
}
System.out.println(builder.toString());
}
}
}