持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第32天,点击查看活动详情
题目知识点补充
-
char charAt(int index):返回指定索引处的字符;
-
使用map.put插入数据:
- 如果当前位置元素为空,则直接插入数据;
- 如果当前位置元素非空,且key已存在,则直接覆盖其value;
- 如果当前位置元素非空,且key不存在,则将数据链到链表末端;
-
HashMap的特点:
- HashMap是线程不安全的实现
- HashMap可以使用null作为key或value。
-
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());
}
}
}
题目运行截图