密码转换的算法解析(简单密码)

135 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第32天,点击查看活动详情

image.png

题目知识点补充

  1. char charAt(int index):返回指定索引处的字符;

  2. 使用map.put插入数据:

    • 如果当前位置元素为空,则直接插入数据;
    • 如果当前位置元素非空,且key已存在,则直接覆盖其value;
    • 如果当前位置元素非空,且key不存在,则将数据链到链表末端;
  3. HashMap的特点:

    • HashMap是线程不安全的实现
    • HashMap可以使用null作为key或value。
  4. HashMap和HashTable的区别

    • Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比Hashtable的性能高一点。
    • Hashtable不允许使用null作为key和value,如果试图把null值放进Hashtable中,将会引发空指针异常,但HashMap可以使用null作为key或value。

题目思路解析

我们采取两种方式,第一种方式就是使用charAt(),取到字符串中的每一个字符然后按照规则进行替换,比如将"abc"换成"2".尤其需要注意的就是最后的"z"是需要单独处理的.第二种方式就是使用map.put进行赋值,后续通过map.get去拿值过来进行比较.如果我们需要使用map,那么就要牵扯到HashMap和HashTable的选择,如果不考虑安全的话直接使用HashMap,性能好一些.

具体的实现代码:

import java.util.*;

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());
        }
    }
}

题目运行截图

image.png