我有一个类似于下面的哈希图,
static Map<String, Integer> map = new HashMap<String, Integer>() {
{
put("**", 15); //11 to 19 and 21 to 26
put("*0", 2); // 1 and 2
put("*1", 2);
put("*2", 2);
put("*3", 2);
put("*4", 2);
put("*5", 2);
put("*6", 2);
put("*7", 1); //1
put("*8", 1);
put("*9", 1);
put("1*", 9); //1 to 9
put("2*", 6); //1 to 6
}};
我正试图从上面的地图中获取与“ 2 *”相对应的值,
方法1
String string = "2*";
char[] ch = string.toCharArray();
map.getOrDefault(ch[0]+ch[1], 0); //returns 0
方法2
String string = "2*";
char[] ch = string.toCharArray();
map.getOrDefault(String.valueOf(ch[0])+String.valueOf(ch[1]), 0); //returns 6
第一个代码段始终返回“ 0”,而第二个代码段可以返回正确的值。我不明白有人可以启发我吗?
答案 0 :(得分:3)
在以下情况下。
batches ==[]
您要添加String string = "2*";
char[] ch = string.toCharArray();
map.getOrDefault(ch[0]+ch[1], 0);
+ ch[0]
。字符加为整数,这就是你
试图得到。 ch[1]
和2
的整数和。
您可以通过执行以下操作将总和转换为字符连接:
*
答案 1 :(得分:1)
原因是因为从char数组获取的值仍被视为int值,因此,您正在搜索映射中没有这些char值。在第二个示例中,您将明确告诉地图获取这些字符的字符串表示形式,这些字符位于地图中。