小编典典

正则表达式优化大型列表

java

我正在比较两个字符串列表,以查找可能的匹配项。例:

public class Tester {

    public static void main(String[] args) {

        List<String> test = new ArrayList<String>();
        List<String> test2 = new ArrayList<String>();

        test.add("3H0875AAAA0012");
        test.add("3H0875AABB0018");
        test.add("3H0875AAAC0010");
        test2.add("3H0875AA");


        for(String s2: test2){
            for (String s: test){
                if (s.matches(".*" + s2 + ".*")){
                    System.out.println("Match");
                }
            }
        }
    }
}

基本上,对于每个字符串,test2我都想查看其中是否test包含test2全部或部分包含的字符串。以上代码的输出应为:

Match 
Match 
Match

但是,在实际情况下,我在测试中有大约225K字符串,而在test2中有大约5K字符串。此比较花费的时间太长,希望查看是否有可能优化比较。分析test2中的前1.5K项大约需要10分钟。因此,至少需要30到40分钟才能完成比较。

提前致谢


阅读 224

收藏
2020-11-01

共1个答案

小编典典

我认为您不应该为此使用 正则表达式
:我认为,在性能方面,String#contains(在此链接指向其javadoc条目)可以为您带来更好的结果;)

例如,您的代码可能是:

for(final String s2: test2){
    for (final String s: test){
        if(s.contains(s2)) {
            System.out.println("Match");
        }
    }
}
2020-11-01