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

时间:2015-03-01 19:20:30

标签: java regex

我有两个数组列表。一个阵列列表包含外国食品,而其他阵列列表包含当地食品。

包含外国产品的数组列表:capturedForeginProduct

capturedForeginProduct 数组列表的示例数据

  

乌梅大蒜

     

告诉Tale Elephant Garlic

     

高顶大蒜

     

卡林顿柠檬冰棒

包含本地产品的数组列表:capturedLocalProducts

  

NOAS Garlic Murukku 100g

     

SMAK大蒜叮咬100克

     

CIC Chilli&蒜酱400g

     

KIST Lemon&薄荷花蜜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 {
                }
            }
        }

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

  

乌梅大蒜应该与NOAS大蒜Murukku 100g匹配

     

告诉Tale Elephant Garlic应该与SMAK Garlic Bites 100g匹配

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

2 个答案:

答案 0 :(得分:0)

你可以创建两个包含这些信息的Enumerations,给出与他们所尊重的食物相关的那些序数值,然后为每个Enumration创建并循环一个ArrayList并匹配信息。

答案 1 :(得分:0)

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

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