比较两个arrayList并获得最长匹配的String

时间:2015-12-12 18:06:33

标签: java arraylist collections

所以我要做的就是获取两个文本文件并返回两者中最长的匹配字符串。我把两个文本文件放在arraylist中,并用每个字分隔它们。到目前为止,这是我的代码,但我只是想知道如何返回最长的字符串,而不仅仅是第一个找到的字符串。

 for(int i = 0; i < file1Words.size(); i++)

{
    for(int j = 0; j < file2Words.size(); j++)
    {
        if(file1Words.get(i).equals(file2Words.get(j)))
        {
            matchingString += file1Words.get(i) + " ";
        }

    }
}

6 个答案:

答案 0 :(得分:2)

String longest = "";
for (String s1: file1Words)
    for (String s2: file2Words)
        if (s1.length() > longest.length() && s1.equals(s2)) longest = s1;

答案 1 :(得分:2)

如果您在时间和空间上寻找性能,与上述回复相比,您可以使用以下代码。

System.out.println("Start time :"+System.currentTimeMillis());
 String longestMatch="";
 for(int i = 0; i < file1Words.size(); i++) {
    if(file1Words.get(i).length()>longestMatch.length()){
        for(int j = 0; j < file2Words.size(); j++) {
            String w = file1Words.get(i);
            if (w.length() > longestMatch.length() && w.equals(file2Words.get(j)))
                longestMatch = w;
        }
    }
System.out.println("End time :"+System.currentTimeMillis());

答案 2 :(得分:1)

我不会给你代码,但我会帮助你解决主要问题...

你需要一个新的字符串变量&#34; curLargestString&#34;跟踪当前最大的字符串。在for循环之外声明这个。现在,每次你得到两个匹配的单词,比较匹配单词的大小和&#34; curLargestString&#34;中单词大小的大小。如果新的匹配单词大于设置&#34; curLargestString&#34;到了新词。然后,在你的for循环运行之后,返回curLargestString。

还有一点需要注意,请务必使用空字符串初始化curLargestString。这样可以防止在获得第一个匹配单词

后调用大小函数时出错

答案 3 :(得分:1)

您可以使用以下代码:

String matchingString = "";
Set intersection = new HashSet(file1Words);
intersection.retainAll(file2Words)

for(String word: intersection) 
    if(word.length() > matchingString.size()) 
         matchingString = word;       

答案 4 :(得分:1)

假设您的文件足够小以适应内存,使用自定义比较器对它们进行排序,在较短的字符串之前放置较长的字符串,否则按字典顺序排序。 然后按顺序浏览这两个文件,一次只推进一个索引(一个指向两个的“最小”条目),然后返回第一个匹配。

答案 5 :(得分:1)

private String getLongestString(List<String> list1, List<String> list2) {
    String longestString = null;

    for (String list1String : list1) {
        if (list1String.size() > longestString.size()) {
            for (String list2String : list2) {
                if (list1String.equals(list2String)) {
                    longestString = list1String;
                }
            }
        }
    }
    return longestString;
}