У меня есть два файла CSV: «userfeatures» и «itemfeatures». Каждая строка в пользовательской функции связана с конкретным пользователем. например, первая строка в файле userfeature является:не может найти правильное пересечение двух строковых массивов, когда есть запятая в строках
005c2e08","Action","nm0000148","dir_ nm0764316","USA"
Мне нужно найти пересечение этой линии с каждой строкой 2-го файла «itemfeatures». (На самом деле, мне нужно повторить эту процедуру для всех пользователей, т. Е. Для всех строк «userfeatures»).
Итак, первое сравнение будет с первой линией «itemfeatures», то есть:
"tt0306047","Comedy,Action","nm0267506,nm0000221,nm0356021","dir_ nm0001878","USA"
Результат пересечения должен быть ["Action", "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» '. –