Чтение из двух файлов одновременно - PullRequest
0 голосов
/ 15 декабря 2011

Предположим, у нас есть два файла как f1 and f2.

Также предположим, что есть функция с именем comparision(File f1,File f2).Эта функция получает два файла в качестве аргументов и берет первый символ (слово) из f1 и сравнивает его со всеми символами в f2 до конца, выбирает вторые и делает до конца как первый и т. Д.

Мой вопрос: как я могу это реализовать?Нужно ли знать EOF?И если да, то как его получить?

Предположим, что файлы представляют собой простой текст (.txt), и каждое слово находится в одной строке.в качестве примера:

f1:   
I
am
new
to
java

f2:

java 
is
a
programing
language

Вот код:

   static void comparision(File f, File g) throws Exception
    {



       Set<String> text = new LinkedHashSet<String>();
BufferedReader br = new BufferedReader(new FileReader(g));
for(String line;(line = br.readLine()) != null;)
   text.add(line.trim().toString());
        if(text==null)
            return;


        BufferedReader br = new BufferedReader(new FileReader(f));
        String keyword = br.readLine();

        if (keyword != null) {

            Pattern p = Pattern.compile(keyword, Pattern.CASE_INSENSITIVE);
            StringBuffer test = new StringBuffer(text.toString());
            matcher = p.matcher(test);
            if (!matcher.hitEnd()) {
                 total++;
                 if (matcher.find()) {
                     //do sth           
                 }
             }
         }
    }

edit by jcolebrand

Что-то, о чем нужно подумать, нам нужен поток программ, который выглядит следующим образом (psuedocode)

function(file1,file2) throws exceptions{
  ArrayList<string> list1, list2; //somebody said we should use an ArrayList ;-)
  string readinTempValue = null;      

  br = BufferedReader(file1) //we are already using a BufferredReader
  readinTempValue = br.ReadLine();

  //this is a loop structure
  while (readinTempValue != null){ //trust me on this one

    //we need to get the string into the array list....
    //how can we ADD the value to list1
    readinTempValue = br.ReadLine(); //trust me on this one
  }


  br = BufferedReader(file2) //we are already using a BufferredReader
  readinTempValue = br.ReadLine();

  //this is a loop structure
  while (readinTempValue != null){ //trust me on this one

    //we need to get the string into the array list....
    //how can we ADD the value to list2
    readinTempValue = br.ReadLine(); //trust me on this one
  }

  foreach(value in list1){
    foreach(value in list2){
      compare value from list 1 to value from list 2
    }
  }
}

1 Ответ

1 голос
/ 15 декабря 2011

Простой базовый алгоритм (может быть точно настроен на основании ПОЧЕМУ вы хотите сравнить)

Read the second file and create a HashSet "hs"
for each word "w" in file 1
  if(hs.contains(w))
  {
    w is present in the second file
  }
  else
  {
    w is not present in the second file
  }

модификации кода ОП

static int comparision(File f, File g) throws Exception
    {
        int occurences = -1;

        Set<String> text = new HashSet<String>();

        BufferedReader br = new BufferedReader(new FileReader(g));
        String line = br.readLine();

        while (line != null)
        {
            String trimmedLine = line.trim();
            if (trimmedLine.length() > 0)
            {
                text.add(trimmedLine.toString());
            }
            line = br.readLine();
        }

        if (text.isEmpty())
        {
            // file 1 doesn't contain any useful data
            return -1;
        }

        br = new BufferedReader(new FileReader(f));
        String keyword = br.readLine();

        if (keyword != null)
        {
            String trimmedKeyword = keyword.trim();
            if (trimmedKeyword.length() > 0)
            {
                if (text.contains(trimmedKeyword))
                {
                    occurences++;
                }
            }
            line = br.readLine();
        }
        return occurences;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...