我目前有一个包含三个字符串( "car"
、 "two dollar"
、 "foo"
)的集合。然后我对传递的 HashMap<String, Double>
执行以下操作.
if (getSet().contains(currentHashMapItem.getKey()) == true) {
System.out.println(currentHashMapItem.getKey());
}
第一个键是"car"
, 按预期匹配并显示。但是,第二个键是 "dollar"
,但不显示。现在我对 contains 如何工作的理解是,如果它正在比较的字符串存在于 getSet()
中返回的 Set 中,它将返回 true。 , 但没有骰子。甚至尝试了 ArrayList<String>
也没有运气。有人遇到过这个吗?我是否试图切得太尖锐并被迫使用正则表达式或迭代器循环?
最佳答案
问题是你的 Set
不包含“dollar”而是“two dollar”。因此它包含一个包含键但不直接包含键的字符串。作为Set.contains()
方法 uses .equals()
,除非 key 相同,否则这将失败。
您可以遍历键集并查看是否有 String.contains()
你的 key 。
作为附加选项,您可以制作一个新的 Set
自己上课contains()
使用 String.contains()
的方法(覆盖或重载当前方法)比较方法而不是 .equals()
.这可以通过三种方式完成:
实现 Set
接口(interface)
-方便并且可以简单地使 boolean contains(Object)
过载使用 boolean contains(String)
的方法选项(也可以查看使用 AbstractSet
类)
Composition 强>
-允许使用不同类型的 Set
(例如 HashSet
、 TreeSet
等),而不是更通用的接口(interface)
继承
-类似于组合,但不太优雅和合适的选项
- 仅当您有其他原因想要 child 上课时才这样做
关于java - 包含在 List 或 Set 中未找到部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31388383/