Вот что я пробовал.
import java.util.*;
public class SetDemo
{
public static void main(String[] args){
String[] file1 = new String[]{"Some", "Simple", "Text", "File"};
String[] file2 = new String[]{"Another", "Text", "File", "With", "Additional", "Lines"};
Set<String> set1 = new HashSet<String>();
Set<String> set2 = new HashSet<String>();
for(String s: file1)
{
set1.add(s);
}
for(String s2: file2)
{
set2.add(s2);
}
Set<String> s1intercopy = new HashSet<String>(set1);
Set<String> s2intercopy = new HashSet<String>(set2);
s1intercopy.retainAll(s2intercopy); //Finds the intesection
Set<String> s1symdiffcopy = new HashSet<String>(set1);
Set<String> s2symdiffcopy = new HashSet<String>(set2);
s1symdiffcopy.removeAll(set2);
s2symdiffcopy.removeAll(set1);
int count = 0;
for(String s7: s1intercopy){
count++;
System.out.println(Integer.toString(count)+'.'+s7);
}
if (set1.size() > set2.size())
{
for(String s3: s1symdiffcopy){
count++;
System.out.println(Integer.toString(count)+'.'+'+'+s3);
}
for(String s4: s2symdiffcopy){
count++;
System.out.println(Integer.toString(count)+'.'+'-'+s4);
}
}else if (set2.size() > set1.size())
{
for(String s5: s2symdiffcopy){
count++;
System.out.println(Integer.toString(count)+'.'+'+'+s5);
}
for(String s6: s1symdiffcopy){
count++;
System.out.println(Integer.toString(count)+'.'+'-'+s6);
}
}
}
}
Выход:
1.Text
2.File
3.+Lines
4.+Additional
5.+Another
6.+With
7.-Some
8.-Simple
Я не был уверен, что вы имели в виду *Some|Another
, но то, что этот код делает просто найти пересечение и симметричную между множествами, определить, какой набор больше, и присвойте '+' значениям, которые являются частью большего набора, а '-' - значениям меньшего набора. Я не читал из файла, чтобы сэкономить время, но эта часть проста, и вы можете это посмотреть. Кажется, что на вашем выходе вы просматривали один файл и для каждой строки в этом файле, просматривая другой файл. Это довольно неэффективно для больших файлов, поэтому я считаю, что вышеупомянутое решение оптимизирует это, сохраняя его в наборах и выполняя операции набора.
наклоняется, говорю ли я понимаю ваш д, но, возможно, вы wqnt большого «FILE» строки. для сравнения с каждой отдельной строкой в менее крупных «ФАЙЛАХ» и распечатать diff? Маленькое прошивание, и вы смеетесь в функцию String.equals для сравнения двух строк. – RadijatoR
Все остальное имеет смысл, но что логика для '* Some | Another' – Shahzeb
Вы можете просто проанализировать файл, добавить строки для разделения наборов и взять разность наборов и других заданных операций, чтобы выяснить, что отличается. что ты уже испробовал? –