Java 从HashMap检索值<;字符串,字符串>;对于字符串的每个字符,返回NULL

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.

我正在学习Java,作为一个项目,我试图制作一个程序,使用
哈希映射
从用户那里接受
字符串
,然后返回相应的(伪拼音)值作为准加密的
字符串

字符串
的长度只有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和我的感谢!