题目知识点补充
- 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,性能好一些.
具体的实现代码:
importjava.util.*; publicclassMain{ publicstaticvoidmain(String[] args){ Scannerin=newScanner(System.in); while(in.hasNextLine()){ Stringcleartext=in.nextLine(); //读取明文StringBuilderbuilder=newStringBuilder(); for(inti=0; i<cleartext.length(); i++){ //小写字母转换为数字if(cleartext.charAt(i)>='a'&&cleartext.charAt(i)<='c') builder.append('2'); elseif(cleartext.charAt(i)>='d'&&cleartext.charAt(i)<='f') builder.append('3'); elseif(cleartext.charAt(i)>='g'&&cleartext.charAt(i)<='i') builder.append('4'); elseif(cleartext.charAt(i)>='j'&&cleartext.charAt(i)<='l') builder.append('5'); elseif(cleartext.charAt(i)>='m'&&cleartext.charAt(i)<='o') builder.append('6'); elseif(cleartext.charAt(i)>='p'&&cleartext.charAt(i)<='s') builder.append('7'); elseif(cleartext.charAt(i)>='t'&&cleartext.charAt(i)<='v') builder.append('8'); elseif(cleartext.charAt(i)>='w'&&cleartext.charAt(i)<='z') builder.append('9'); //大写字母'A'~'Y'转换elseif(cleartext.charAt(i)>='A'&&cleartext.charAt(i)<='Y') builder.append((char)(cleartext.charAt(i)+'a'-'A'+1)); //大写字母'Z'单独处理elseif(cleartext.charAt(i) =='Z') builder.append('a'); //其他字符不做变换elsebuilder.append(cleartext.charAt(i)); } System.out.println(builder.toString()); } } }
题目运行截图