Вызов двух разных методов в один метод в Java - PullRequest
0 голосов
/ 29 марта 2012

Я хочу:

  1. Чтение в двух файлах
  2. Разделить файлы на отдельные строки
  3. Сравните два списка строк и получите строки, уникальные для файла.

В настоящий момент я сталкиваюсь с проблемой поиска способа вызова двух методов, используемых для вызова файлов (по одному для каждого файла), к одному и тому же методу для сравнения.

Оба метода используют оператор try-catch-while, и если я пытаюсь прочитать все записи после оператора while, отображается только один, а не весь список.

Есть ли способ отправить части обоих методов в качестве параметров для одного нового метода?

Вот код для программы. Я знаю, что есть проблемы с тем, как я выполняю программу, но я делаю это только так, как меня учили.

  File mainEmails = new File("Testrun.txt");
  Scanner inputScanner = null;


    int counter = 1;
    String fullName = null;
    String position = null;
    String companyName = null;
    String telNumber = null;
    String emailAddress = null;

  try
  {

    inputScanner = new Scanner(mainEmails);

  }

  catch(FileNotFoundException e)
  {
    System.out.println("File has not been found.");
  }

  while (inputScanner.hasNextLine())
  {

    String nextLine = inputScanner.nextLine();
    String [] splitFile = nextLine.split(",");
    for (int i = 0; i <splitFile.length;i++)
    {
      if(i==0)
        {
          fullName = splitFile[0];
        }
        else if(i==1)
        {
          position = splitFile[1];
        }
        else if(i==2)
        {
          companyName = splitFile[2];
        }
        else if(i==3)
        {
          telNumber = splitFile[3];
        }
        else if(i==4)
        {
          emailAddress = splitFile[4];
        }
        else if(splitFile[i] == null)
      {
        System.out.println("You have failed!");
      }
    }
  }


public static void deletionList()
{

  File deletionEmails = new File("Testrun1.txt");
  Scanner inputScanner1 = null;

    String deletionfullName = null;
    String deletionposition = null;
    String deletioncompanyName= null;
    String deletiontelNumber = null;
    String deletionemailAddress = null;

    try
  {
    inputScanner1 = new Scanner(deletionEmails);
  }
    catch(FileNotFoundException e)
  {
    System.out.println("File has not been found.");
  }
   while (inputScanner1.hasNextLine())
  {
    String deletionnextLine = inputScanner1.nextLine();
    String [] deletionsplitFile = deletionnextLine.split(",");
    for (int i = 0; i <deletionsplitFile.length;i++)
    {
      if(i==0)
        {
          deletionfullName = deletionsplitFile[0];
        }
        else if(i==1)
        {
          deletionposition = deletionsplitFile[1];
        }
        else if(i==2)
        {
          deletioncompanyName = deletionsplitFile[2];
        }
        else if(i==3)
        {
          deletiontelNumber = deletionsplitFile[3];
        }
        else if(i==4)
        {
          deletionemailAddress = deletionsplitFile[4];
        }
        else if(deletionsplitFile[i] == null)
      {
        System.out.println("You have failed!");
      }
    }
   }
}

То, что я пытаюсь сделать, это взять fullName, emailAddress из первого разбиения и deletetionfullName и deletionemailAddress из второго разбиения и сравнить первое и второе каждого соответственно. В каждом файле будет несколько полей, и меня интересуют только поля fullName и emailAddress.

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Довольно сложно понять, как вы пытаетесь реализовать свое решение, поэтому я могу предложить вам взглянуть на другой способ выполнения всего процесса чтения и сравнения. Например, я бы предложил сделать что-то вроде этого ... (в psuedocode)

public void compareFiles(String file1, String file2){
    // Read the lines of each file into String[] arrays
    String[] file1Lines = readAndSplitIntoLines(file1);
    String[] file2Lines = readAndSplitIntoLines(file2);

    // compare the lines
    for (int x=0;x<file1Lines.length;x++){
        for (int y=0;y<file2Lines.length;y++){
            if (file1Lines[x].equals(file2Lines[y])){
                // match. set it to null
                file1Lines[x] = null;
                file2Lines[y] = null;
                // break out of the inner loop and start comparing the next line
                break;
            }
        }

    // remove the duplicates (which are now null values), creating a smaller array of uniques.
    String[] newFile1 = shrinkArrayByRemovingNulls(file1Lines);
    String[] newFile2 = shrinkArrayByRemovingNulls(file2Lines);
    }
0 голосов
/ 29 марта 2012

Помимо того, что ваш вопрос не очень понятен, у вас есть по крайней мере одна явная проблема:

НЕ используйте обработку исключений для логики!Обработка исключений должна выполняться только для исключений .

Во-вторых, подумайте о том, что вы действительно хотите сделать.В псевдокоде это будет выглядеть примерно так:

list1 = split(file(name1).read())
list2 = split(file(name2).read())

list3 = unique(list1, list2)

Как выглядит ваш код?

...