包含未在List或Set中查找部分字符串

时间:2015-07-13 16:15:20

标签: java collections contains

我目前有一个包含三个字符串的集合("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>也没有运气。有没有人遇到过这个?我试图削减过于尖锐的角落并被迫使用正则表达式或迭代器循环吗?

5 个答案:

答案 0 :(得分:1)

问题是你的Set不包含“美元”而是“两美元”。因此,它包含一个包含密钥但不直接包含密钥的字符串。作为Set.contains()方法uses .equals(),除非密钥相同,否则这将失败。

您可以遍历该组密钥,看看您的密钥是否String.contains()

作为一个附加选项,您可以使用自己的Set方法(覆盖或重载当前的方法)创建一个新的contains()类,该方法使用String.contains()比较方法而不是.equals()。这可以通过三种方式完成:

实施Set界面
- 方便而且可以简单地使用boolean contains(Object)选项重载boolean contains(String)方法(另请参阅使用AbstractSet类)

<强> Composition
- 允许使用不同类型的Set(例如HashSetTreeSet等),而不是更通用的界面

<强>传承
- 与成分相似,但不太优雅和适当的选择
- 如果您有其他理由想要儿童班,只需这样做

答案 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