我目前有一个包含三个字符串的集合("car"
,"two dollar"
,"foo"
)。然后,我针对传递的HashMap<String, Double>
执行以下操作。
if (getSet().contains(currentHashMapItem.getKey()) == true) {
System.out.println(currentHashMapItem.getKey());
}
第一个键是"car"
,它按预期匹配并显示。但是,第二个键是"dollar"
,但不显示。现在我对包含有效的方法的理解是,如果它所比较的字符串存在于getSet()
中返回的Set中,但是没有骰子,它将返回true。即使尝试ArrayList<String>
也没有运气。有没有人遇到过这个?我试图削减过于尖锐的角落并被迫使用正则表达式或迭代器循环吗?
答案 0 :(得分:1)
问题是你的Set
不包含“美元”而是“两美元”。因此,它包含一个包含密钥但不直接包含密钥的字符串。作为Set.contains()
方法uses .equals()
,除非密钥相同,否则这将失败。
您可以遍历该组密钥,看看您的密钥是否String.contains()
。
作为一个附加选项,您可以使用自己的Set
方法(覆盖或重载当前的方法)创建一个新的contains()
类,该方法使用String.contains()
比较方法而不是.equals()
。这可以通过三种方式完成:
实施Set
界面
- 方便而且可以简单地使用boolean contains(Object)
选项重载boolean contains(String)
方法(另请参阅使用AbstractSet
类)
<强> Composition 强>
- 允许使用不同类型的Set
(例如HashSet
,TreeSet
等),而不是更通用的界面
<强>传承强>
- 与成分相似,但不太优雅和适当的选择
- 如果您有其他理由想要儿童班,只需这样做
答案 1 :(得分:1)
关键是“两美元”。这与“美元”不匹配,因此找不到密钥。要执行您想要的操作,您必须检索集合中的每个键,并使用keyString.contains("dollar");
查找部分匹配项。
答案 2 :(得分:1)
contains
方法将使用equals
类的String
方法查找完全匹配。因此,"dollar".equals("two dollar");
将返回false。
您要做的是遍历Set
并改为使用String.contains
:
Set<String> set = getSet();
for(String s : set) {
if(currentHashMapItem.getKey().contains(s)) {
System.out.println(s);
}
}
答案 3 :(得分:1)
true
)包含传递给它的对象,则 Set
返回"dollar"
。您的集合不包含字符串"two dollars"
- 它包含更长的字符串public static boolean containsSubString (Collection<String> col, String str) {
for (String s: col) {
if (s.contains(str)) {
return true;
}
}
return false;
}
。如果要测试集合是否包含给定的子字符串,则必须自己实现:
var result = {};
for (i = 0, n = arr.length; i < n; i++) {
var item = arr[i];
result[ item.place + " - " + item.name ] = item;
}
答案 4 :(得分:-1)
包含on,如果键等于 <= p>,则为true
contains on String如果string包含参数
,则为true