Java 求两个字符串的交点

Java 求两个字符串的交点,java,string,arraylist,Java,String,Arraylist,我有两个CSV文件:“userfeatures”和“itemfeatures” 我应该将每行userfeatures与每行itemfeatures进行比较,以找到与每行的匹配(交点)。 例如,userfeature文件中的第一行是: 005c2e08”、“行动”、“nm0000148”、“目录nm0764316”、“印度” 现在,我需要找到这一行(与user-1相关)与第二个文件“itemfeatures”的每一行的交点。第二个文件具有相同的结构,因此,例如,第一个比较将与“itemfeatur

我有两个CSV文件:“userfeatures”和“itemfeatures”

我应该将每行userfeatures与每行itemfeatures进行比较,以找到与每行的匹配(交点)。 例如,userfeature文件中的第一行是:

005c2e08”、“行动”、“nm0000148”、“目录nm0764316”、“印度”

现在,我需要找到这一行(与user-1相关)与第二个文件“itemfeatures”的每一行的交点。第二个文件具有相同的结构,因此,例如,第一个比较将与“itemfeatures”的第一行进行,即:

“tt0306047”、“喜剧”、“nm0267506、nm0000221、nm0356021”、“目录nm0001878”、“美国、加拿大”

以下是我到目前为止所做的尝试:

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;
        }
    }
公共类主{
公共静态void main(字符串[]args)引发异常{
BufferedReader userfeatures=新的BufferedReader(新的文件阅读器(“userfeatures.csv”);
BufferedReader itemfeatures=新的BufferedReader(新的文件阅读器(“itemfeatures.csv”);
ArrayList userlines=新的ArrayList();
ArrayList itemlines=新的ArrayList();
字符串Uline=null;
字符串Iline=null;
而((Uline=userfeatures.readLine())!=null){
对于(int i=1;i

似乎我不能对“String”类型使用retainal,所以我想知道如何解决这个问题?我在这里搜索了很多,但我找到的都是数组的交集,除了。(但这篇文章与我的情况不同,因为它比较了字符串中的每个字符,而我需要逐字比较).

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

尝试将
Uline
Iline
转换为单词,并改为使用
Set
而不是
Array

static Set intersect(字符串Uline,字符串Uline){
Set result=newhashset(Arrays.asList(Uline.split(“,”));
Set-IlineSet=newhashset(Arrays.asList(Iline.split(“,”));
结果:保留(IlineSet);
返回结果;
}

谢谢你的回答。但我认为从我打印itemlines开始,这些行就已经是字符串数组了。get(1),我得到了:
“tt0002199”,“戏剧,传记”,“nm0376639,nm0245769,nm0310155”,“dir_nm0646058”,“USA”“
这是一个字符串数组。。我遗漏了什么吗?对不起,我的意思是这一行也应该由方法intersect内的cvs分隔符分割。如@Jerry06所述的方法。谢谢,我尝试了Jerry的回答,但是,我仍然有一些错误。。我想我还应该修复这个部分
intersect(Uline,Iline).size()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;
}