当前位置: 首页 > 面试题库 >

Java:基于正则表达式搜索HashMap键吗?

冯宏恺
2023-03-14
问题内容

我正在使用HashMap构建同义词库来存储同义词。

我正在尝试根据正则表达式搜索单词:该方法将必须将字符串作为参数并返回结果数组。这是我的第一个方法:

public ArrayList<String> searchDefinition(String regex) {
    ArrayList<String> results = new ArrayList<String>();

    Pattern p = Pattern.compile(regex);

    Set<String> keys = thesaurus.keySet();
    Iterator<String> ite = keys.iterator();

    while (ite.hasNext()) {
        String candidate = ite.next();
        Matcher m = p.matcher(candidate);
        System.out.println("Attempting to match: " + candidate + " to "  + regex);
        if (m.matches()) {
            System.out.println("it matches");
            results.add(candidate);
        }
    }

    if (results.isEmpty()) {
        return null;
    }
    else {
        return results;
    }
}

现在,这不符合我的预期(或者我使用的正则表达式不正确)。如果我在哈希图中具有以下键:

cat, car, chopper

然后打电话searchDefinition("c")searchDefinition("c*")我得到null

  1. 我如何使这项工作按预期进行?
  2. 是否有比HashMap更好的数据结构来保留graph同义词库所需的类似数据?(仅出于好奇,对于此任务,我们被要求使用Java Collection Map)。
  3. 我在上面的代码中不适当地做了什么?

谢谢,丹

编辑:我已更正示例。即使我使用正确的大小写也不起作用。


问题答案:

您需要指定不区分大小写的Pattern.compile

( "c",Pattern.CASE_INSENSITIVE
)。要查找其中包含a的单词,c您需要使用matcher.find()。Matcher.matches()尝试匹配整个字符串。



 类似资料:
  • 问题内容: 我需要找到与特定正则表达式匹配的所有软件包: 基本上,包的名字应该与启动,并有后话。例如,以下软件包应匹配: 我可以做,但是有很多我不感兴趣的软件包。 是否提供通过正则表达式查找软件包的方法?或者,我应该只是通过管道传递结果来过滤掉无关的包? 此外,可能是一个的“交集” ,并有助于太。 问题答案: alecxe,我相信这是您要寻找的一线客。 如下面评论中铬酸盐所建议的那样,您可以根据需

  • 问题内容: 我需要在给定正则表达式的字符串中找到所有匹配项。我一直在这样做,直到遇到一个案例,它没有达到我的预期。例如: 在这种情况下,返回我需要的内容(最长的匹配项),但是行为却有所不同,尽管文档暗示它应该是相同的: 匹配所有出现的模式,而不仅仅是第一个。 为什么行为不同? 如何获得with (或其他方式)的结果? 问题答案: 好的,我从文档中查看发生了什么…… 如果该模式中存在一个或多个组,则

  • 你好,我的golang中有以下代码: 请看一下: 我在数据库中有一个名为“斯瓦蒂”和姓“沙玛”的记录。当我搜索“swati”时,它会正常工作,同样,当我搜索到“sharma”时也会正常工作。 问题是当我搜索“swati sharma”时,它没有返回任何结果。谁能告诉我怎样才能达到这个产量?

  • 我的正则律很糟糕。我想建立一个智能搜索,在那里我可以给搜索引擎提示在哪个属性上搜索什么。 类似这样: 搜索输入:位置:伦敦 - 搜索输入:位置:纽约伦敦 - 搜索输入:位置:伦敦标签:栏 - - 搜索输入:地点:伦敦,纽约标签:酒吧,俱乐部 - - 我想知道正则表达式应该如何解析这样的用户输入?

  • 问题内容: 我正在尝试输入之间的内容,我的模式没有做正确的事,请帮忙。 下面是sudocode: 要求的输出: 之一 二 三 问题答案: 先行使用并在循环中使用,而不是: 看到它在线上工作:ideone 但是最好在这里使用split: 看到它在线上工作:ideone