找到两个字符串的交集

时间:2015-12-08 02:18:53

标签: java string arraylist

我有两个CSV文件:" userfeatures"和" itemfeatures"。

我应该将每行用户特征与每行项目特征进行比较,以找到每行的匹配(交叉点)。 例如,userfeature文件中的第一行是:

005c2e08","Action","nm0000148","dir_ nm0764316","India"

现在,我需要找到这一行(与用户1相关)与第二个文件" itemfeatures"的每一行的交集。第二个文件具有相同的结构,因此,例如,第一个比较将是" itemfeatures"那就是:

"tt0306047","Comedy","nm0267506,nm0000221,nm0356021","dir_ nm0001878","USA,Canada"

以下是我迄今为止所做的尝试:

public class Main {
      public static void main(String[] args) throws Exception {   
         BufferedReader userfeatures = new BufferedReader(new FileReader("userfeatures.csv"));
         BufferedReader itemfeatures = new BufferedReader(new FileReader("itemfeatures.csv"));       
         ArrayList<String> userlines = new ArrayList<>();
         ArrayList<String> itemlines = new ArrayList<>();
         String Uline = null;
         String Iline = null;

         while ((Uline = userfeatures.readLine()) != null) {
                for (int i=1; i< userlines.size(); i++){
                   userlines.add(Uline); 
                   intersect(Uline, Iline).size();
                }
        }
     //  System.out.println(Uline);    
     userfeatures.close();
     itemfeatures.close();
     }       
      static ArrayList<String> intersect(String Uline, String Iline) {
           ArrayList<String> result = new ArrayList<String>();
           result.retainAll(Iline);
           return result;
        }
    }

似乎我不能将retainAll用于类型&#34; String&#34;,所以我想知道如何解决这个问题?我在这里搜索了很多,但我发现的只是找到除this one之外的数组的交集。 (但是这篇文章与我的案例不同,因为它比较了字符串中的每个字符,而我需要逐字逐句比较)。

2 个答案:

答案 0 :(得分:2)

尝试将UlineIline转换为字词,然后更改为使用Set<String>代替Array<String>

static Set<String> intersect(String Uline, String Iline) {
    Set<String> result = new HashSet<String>(Arrays.asList(Uline.split(",")));
    Set<String> IlineSet = new HashSet<String>(Arrays.asList(Iline.split(",")));
    result.retainAll(IlineSet);
    return result;
}

答案 1 :(得分:1)

首先,将行拆分为数组。然后,在非空数组上调用retainAll