Java 从HashMap检索值<;字符串,字符串>;对于字符串的每个字符,返回NULL
我正在学习Java,作为一个项目,我试图制作一个程序,使用Java 从HashMap检索值<;字符串,字符串>;对于字符串的每个字符,返回NULL,java,string,hashmap,Java,String,Hashmap,我正在学习Java,作为一个项目,我试图制作一个程序,使用哈希映射从用户那里接受字符串,然后返回相应的(伪拼音)值作为准加密的字符串 当字符串的长度只有1个字符时,我成功地实现了这一点,但我多次尝试处理完整的句子都失败了 在之前的SO问题中,这被标记为重复(我删除了该问题),但之前的相关解决方案: for (int i = 0; i < args.length(); i++){ char c = args.charAt(i); s += lookup.
哈希映射
从用户那里接受字符串
,然后返回相应的(伪拼音)值作为准加密的字符串
当字符串
的长度只有1个字符
时,我成功地实现了这一点,但我多次尝试处理完整的句子都失败了
在之前的SO问题中,这被标记为重复(我删除了该问题),但之前的相关解决方案:
for (int i = 0; i < args.length(); i++){
char c = args.charAt(i);
s += lookup.get(c);
s += " ";
}
如果有用,我还可以为包含我的
main
函数的.java
文件提供相应的代码。如果地图的字符串作为键,则不能使用char
char c = args.charAt(i);
s += lookup.get(c); // you are giving char as key, what is not valid!!!
使用此解决方法:
for (int i = 0; i < args.length(); i++){
char c = args.charAt(i);
s += lookup.get(c+"");
// ↑ ugly but converts char to String
s += " ";
}
for(int i=0;i
或者这个,更礼貌一点:
for (int i = 0; i < args.length(); i++){
String c = Character.toString(args.charAt(i));
s += lookup.get(c);
s += " ";
}
for(int i=0;i
如果地图的键为字符串
,则不能使用字符
char c = args.charAt(i);
s += lookup.get(c); // you are giving char as key, what is not valid!!!
使用此解决方法:
for (int i = 0; i < args.length(); i++){
char c = args.charAt(i);
s += lookup.get(c+"");
// ↑ ugly but converts char to String
s += " ";
}
for(int i=0;i
或者这个,更礼貌一点:
for (int i = 0; i < args.length(); i++){
String c = Character.toString(args.charAt(i));
s += lookup.get(c);
s += " ";
}
for(int i=0;i
它将返回null
,因为您已使用String
将映射声明为HashMap lookup
,并使用char
char c = args.charAt(i);
s += lookup.get(c);
这就是它返回null
的原因
所以,请改用此选项:
char c = args.charAt(i);
s += lookup.get(new String(c));
它返回null
,因为您已使用String
将映射声明为HashMap lookup
,并将键的类型声明为,然后尝试使用char
进行检索
char c = args.charAt(i);
s += lookup.get(c);
这就是它返回null
的原因
所以用这个来代替:
char c = args.charAt(i);
s += lookup.get(new String(c));
您的方法的问题是映射中的键的类型为String
,而用于查找的键的类型为char
您可以通过两种方式解决此问题:
- 将
字符
转换为字符串
——例如,将其与“
”连接,调用到字符串
,或使用valueOf
方法,或
- 将映射更改为
HashMap
第一种方法(将char
转换为String
稍微有点浪费,因为它会产生大量的一次性字符串。虽然通过char
访问需要装箱,character
类会实习代码正在使用的所有字符,并重用同一对象进行装箱转换。这消除了电子垃圾
第二种方法更简洁,可以让查找保持不变。只需更改插入:
Map<Character,String> lookup = new HashMap<>();
lookup.put('a', "xuduo");
lookup.put('b', "bai");
lookup.put('c', "cai");
...
Map lookup=newhashmap();
lookup.put('a','xudo');
lookup.put('b','bai');
lookup.put('c','cai');
...
其他一切都将继续工作,无需进行其他更改。您的方法的问题是,映射中的键的类型为String
,而用于查找的键的类型为char
您可以通过两种方式解决此问题:
- 将
字符
转换为字符串
——例如,将其与“
”连接,调用到字符串
,或使用valueOf
方法,或
- 将映射更改为
HashMap
第一种方法(将char
转换为String
稍微有点浪费,因为它会产生大量的一次性字符串。虽然通过char
访问需要装箱,character
类会实习代码正在使用的所有字符,并重用同一对象进行装箱转换。这消除了电子垃圾
第二种方法更简洁,可以让查找保持不变。只需更改插入:
Map<Character,String> lookup = new HashMap<>();
lookup.put('a', "xuduo");
lookup.put('b', "bai");
lookup.put('c', "cai");
...
Map lookup=newhashmap();
lookup.put('a','xudo');
lookup.put('b','bai');
lookup.put('c','cai');
...
其他一切都将继续工作,无需额外更改。char
和String
数据类型在Java中是不同的。您似乎试图通过传递char
来从地图中检索某些内容。char
和String
数据类型在Java中是不同的。您似乎正在尝试g通过传递char
从地图中检索某物。为什么不使用String.valueOf(char);
。@Kayaman更新了答案,刚刚使用了char+“”
因为OP说:我在学习Java非常感谢你和@resueman,我对两个答案都投了赞成票,并将在足够的时间后将其标记为解决方案,所以为什么不使用String.valueOf(char);
。@Kayaman更新了答案,刚刚使用了char+“”
因为OP说:我正在学习Java非常感谢你和@resueman,我对这两个答案都投了赞成票,并将在足够的时间完成另一个好的解决方案后将其标记为解决方案。其他人先回答,但我可以给你a+1和我的感谢!另一个好的解决方案。其他人先回答,但我可以给你一个答案+1和我的感谢!