Java 求两个字符串的交点
我有两个CSV文件:“userfeatures”和“itemfeatures” 我应该将每行userfeatures与每行itemfeatures进行比较,以找到与每行的匹配(交点)。 例如,userfeature文件中的第一行是:Java 求两个字符串的交点,java,string,arraylist,Java,String,Arraylist,我有两个CSV文件:“userfeatures”和“itemfeatures” 我应该将每行userfeatures与每行itemfeatures进行比较,以找到与每行的匹配(交点)。 例如,userfeature文件中的第一行是: 005c2e08”、“行动”、“nm0000148”、“目录nm0764316”、“印度” 现在,我需要找到这一行(与user-1相关)与第二个文件“itemfeatures”的每一行的交点。第二个文件具有相同的结构,因此,例如,第一个比较将与“itemfeatur
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()因为我刚刚注意到,在我要计算的时刻,intersect-Iline是空的。。我也应该读它…也许值得单独阅读这些文件的内容,因为它的行数可能不同。在这样的操作之后,您将有一个简单的双循环,通过两个功能内容的所有行
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;
}