java - 将数组列表中的产品与另一个数组列表中的类似产品进行匹配

标签 java regex

我有两个数组列表。一个数组列表包含外国食品,而另一个数组列表包含本地食品。

保存外国产品的数组列表:capturedForeginProduct

capturedForeginProduct数组列表的示例数据

Ebony Garlic

Tell Tale Elephant Garlic

High Top Garlic

Carrington Lemon Popsicles

保存本地产品的数组列表:capturedLocalProducts

NOAS Garlic Murukku 100g

SMAK Garlic Bites 100g

CIC Chilli & Garlic Sauce 400g

KIST Lemon & Mint Nectar 1L

我想列出与外国产品匹配的本地产品。

我使用以下代码来获取输出。

for (int i = 0; i < capturedForeginProduct.size(); i++) {
            for (int j = 0; j < capturedLocalProducts.size(); j++) {
                //   if(capturedForeginProduct.get(i).contains("Garlic")) {
                if (Pattern.compile(Pattern.quote(capturedLocalProducts.get(j)), Pattern.CASE_INSENSITIVE).matcher(capturedForeginProduct.get(i)).find() || capturedLocalProducts.get(j).toLowerCase().contains(capturedForeginProduct.get(i).toLowerCase())) {
                    log.debug("Matching .. : " + "\t" + capturedForeginProduct.get(i) + "\t" + capturedLocalProducts.get(j));
                    firstForeignProducts.add(capturedForeginProduct.get(i));
                    firstLocalProducts.add(capturedLocalProducts.get(j));
                }
                else {
                }
            }
        }

这就是我想做的......

Ebony Garlic should match NOAS Garlic Murukku 100g

Tell Tale Elephant Garlic should match SMAK Garlic Bites 100g

还有其他方法可以实现这个目标吗?任何算法都被接受。

最佳答案

您想要查找包含某个单词的所有本地产品,而该单词也包含在至少一种外国产品中。不要迭代产品和单词的每种可能的组合 (O(n^2*length^2)),而是将外国产品中使用的每个单词收集到 HashSet 中,然后对于每个本地产品检查该集合是否包含本地产品中的任何单词。

请注意,您检查匹配的方法不正确:它通过两种不同的方法检查描述是否完全相等,忽略大小写;您必须使用 String.split("") 获取产品中的单词,然后迭代这些单词以检查匹配项。

关于java - 将数组列表中的产品与另一个数组列表中的类似产品进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797943/

相关文章:

java - 如何上移/下移表格中的项目

java - adb 触摸屏滑动通话失败

java - 使用 CXF/JAXB2 生成和自定义 equals/hashcode 方法

Java jar 文件未在 Linux 终端中运行

php - 验证电子邮件地址和 URL?从 JavaScript 转换为 PHP

regex - Gradle:在构建中使用正则表达式替换多行

java - 如何同时在两个数组中找到相同的 byte[]-objects?

python - 正则表达式突出显示开头和结尾的换行符

javascript - 如何使用javascript中的replace函数动态替换图片src?

正则表达式并匹配所有文本而不是子字符串