【发布时间】:2017-04-15 19:42:32
【问题描述】:
说,我有一个类似这样的数组,
{"A", "1", "B", "2", "C", "3"}
我想把它放到HashMap 像对一样,我尝试了几种方法,但似乎都没有。
我创建了一个方法 isDigit() 来检查项目是否为数字,
private static boolean isDigit(String str){
try {
Integer.parseInt(str);
}
catch (NumberFormatException nfe){
return false;
}
return true;
}
然后我尝试分成 2 个数组,数字和字母。
for (int i = 0; i <= parts.length; i++) {
if (isDigit(parts[i])) {
numbers[i] = parts[i];
} else {
abcs[i] = parts[i];
}
}
最后,
for (int i = 0; i < numbers.length ; i++) {
map.put(abcs[i], numbers[i]);
}
然后我打印出来,
for (String each: map.keySet()) {
System.out.println(each + ":" + map.get(each));
}
打印类似的东西,
1
A : null
2
B : null
它应该打印的是什么,
A : 1
B : 2
C : 3
【问题讨论】:
-
"A"1"B"2"C"3" 不是数组。
-
isDigit("10")将返回 true,但 10 不是数字。isInteger会是一个更好的名字。 -
你让它变得比必要的更难(和更慢)。为什么不直接遍历原始数组,将当前元素和下一个元素添加到地图中,然后将 2 添加到循环计数器?
for (int i = 0; i < array.length; i += 2) { map.put(array[i], array[i + 1]); } -
@JB Nizet 已经尝试过了,让我也用它来编辑问题。
-
有多种方法可以做到这一点,你的方法就是其中之一,尽管它不是最好的。仍然作为一种学习,您必须尝试了解代码中的错误或问题。我已经添加了我的答案,并试图用解决问题的解决方案来解释问题。希望它会有所帮助。 stackoverflow.com/a/43430604/504133