【问题标题】:Searching a HashSet with regex使用正则表达式搜索 HashSet
【发布时间】:2017-05-17 17:49:01
【问题描述】:

有一个字符串的 HashSet,我想搜索键。 HashSet 内容看起来像

AB
A1-A2-A3
A1
A2-A3
AD-A1
AZ
...

如果我使用theSet.contains("A1"),那么它将只返回A1。但是,我想得到A1-A2-A3A1AD-A1。我的数据文件中的特殊字符是-,它是分隔符,以防一行包含它。

如果我不使用 HashSet 并在字符串数组中搜索,那么我知道如何使用 matcher()。 HashSet 有什么解决方案吗?

【问题讨论】:

  • 循环遍历集合,检查每个元素是否匹配
  • 请记住,HashSet 由哈希表支持。这意味着没有搜索 HashSet 的概念。您只能根据已有的已知密钥执行查找。使用正则表达式意味着您想要线性扫描 HashSet,因此您需要迭代......没有办法解决它。

标签: java regex hashset


【解决方案1】:

没有比遍历整个HashSet 并在每个元素上运行匹配器更好的解决方案了。

for (String str : set) {
  if (str.contains("A1")) {
    // do whatever with str
  }
}

【讨论】:

  • 所以,我只是想看看是否可以通过 HashSet 使用“时间减少”的力量来搜索字符串数组。
  • 这可能会返回误报,因为它不检查分隔符。
  • @mahmood:不。不是。
【解决方案2】:

嗯,你可以试试……

取出所有的键,构造一个很长很丑的字符串

,AB,A1-A2-A3,A1,A2-A3,AD-A1,AZ,...

然后为 A1 查找所有“种类”的正则表达式:

uglystring = ",AB,A1-A2-A3,A1,A2-A3,AD-A1,"
thelist = re.findall("([^,]*A1[^,]*)", uglystring)
print (thelist)

那是在 python 中。很丑,但也许能让你朝着正确的方向前进?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2011-09-02
    • 2013-11-02
    • 1970-01-01
    • 2015-02-12
    • 2021-08-06
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多