【发布时间】:2015-12-08 14:53:02
【问题描述】:
我有两个 CSV 文件:“userfeatures”和“itemfeatures”。 userfeature 中的每一行都与特定用户相关。例如,userfeature 文件的第一行是:
005c2e08","Action","nm0000148","dir_ nm0764316","USA"
我需要找到这条线与第二个文件“itemfeatures”的每一行的交点。 (实际上,我需要为所有用户重复此过程,即所有“userfeatures”行)。
所以,第一个比较将是与“itemfeatures”的第一行,即:
"tt0306047","Comedy,Action","nm0267506,nm0000221,nm0356021","dir_ nm0001878","USA"
交集的结果应该是 ["Action", "USA]" 但不幸的是,我的代码只找到 ["USA"] 作为匹配项。到目前为止,这是我尝试过的:
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader userfeatures = new BufferedReader(new FileReader("userFeatureVectorsTest.csv"));
BufferedReader itemfeatures = new BufferedReader(new FileReader("ItemFeatureVectorsTest.csv"));
ArrayList<String> userlines = new ArrayList<>();
ArrayList<String> itemlines = new ArrayList<>();
String Uline = null;
while ((Uline = userfeatures.readLine()) != null) {
for (String Iline = itemfeatures.readLine(); Iline != null; Iline = itemfeatures.readLine()) {
System.out.println(Uline);
System.out.println(Iline);
System.out.println(intersect(Uline, Iline));
System.out.println(union(Uline, Iline));
}
}
userfeatures.close();
itemfeatures.close();
}
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;
}
static Set<String> union(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.addAll(IlineSet);
return result;
}
}
我认为问题与Uline.split(",") 和Iline.split(",") 有关,因为他们将"Comedy,Action" 视为1 个单词,因此无法找到[Action] 作为"Comedy,Action" 和"Action" 的交集。
如果有人知道如何解决此问题,我将不胜感激。
非常感谢,
【问题讨论】:
-
因为当您使用
,拆分时,您会得到"Action"和Action"。
标签: java arrays string comma set-intersection