2013-05-27 3 views
2

У меня есть два текстовых файла, и я хочу сравнить содержимое текстовых файлов с помощью java.Сравнение двух текстовых файлов string по строке в java

Например, первый файл e1.txt имеет содержание "hello this is india", а другой e2.txt содержимое "hello this is usa". Я хочу, чтобы на выходе был текст, который не является similer в обоих файлах (здесь вывод должен быть india или usa).

Проблема, с которой я столкнулся, заключается в том, что метод Java IO читается по строкам, поэтому в этом случае вывод не будет выдаваться (обе строки разные), а также пробелы должны игнорироваться. Буду очень благодарен, если кто-нибудь поможет мне в этой проблеме.

Вот мой код:

public void fh() throws FileNotFoundException, IOException{ 
    File f1=new File("C:\\\\Users\\\\Ramveer\\\\Desktop\\\\idrbt Project\\\\e1.txt"); 
    File f2=new File("C:\\\\Users\\\\Ramveer\\\\Desktop\\\\idrbt Project\\\\e2.txt"); 
    FileInputStream fi1=new FileInputStream(f1); 
    FileInputStream fi2=new FileInputStream(f2); 
    DataInputStream di1=new DataInputStream(fi1); 
    BufferedReader br1=new BufferedReader(new InputStreamReader(di1)); 
    DataInputStream di2=new DataInputStream(fi2); 
    BufferedReader br2=new BufferedReader(new InputStreamReader(di2)); 
    String s1, s2; 
    while ((s1=br1.readLine())!=null && (s2=br2.toString())!=null) 
    { 
    if(!s1.equals(s2)){ 
    System.out.println(s1); 
     } 
    } 
} 
+0

Отформатируйте свой код :) – vikingsteve

+0

действительно ли порядок слов? я имею в виду, если он вернет тот же результат для сравнения «привет, это Индия», чтобы «привет, это США» и «привет, это так», чтобы «привет, это США»? –

+0

Вы должны научиться отлаживать. Вставьте точку останова и пройдите по линиям. Следите за своими переменными и посмотрите, какое значение у них есть. Вы найдете свою проблему и сможете ее решить достаточно скоро. – Joetjah

ответ

2

Посмотрите на класс StringTokenizer и String.indexOf метод (String S).

Вы можете использовать StringTokenizer для разбиения строки на разделы, разделенные разделителями.

Вы можете использовать String.indexOf (String s), чтобы найти конкретную строку в другой строке.

Возможно, вы решите вашу проблему, используя комбинацию этих элементов.

3

Так же, как то, что я заметил, использовать java.util.Scanner

public static void fha(InputStream is1, InputStream is2) throws IOException { 
    Scanner sc1 = new Scanner(is1); 
    Scanner sc2 = new Scanner(is2); 
    while (sc1.hasNext() && sc2.hasNext()) { 
     String str1 = sc1.next(); 
     String str2 = sc2.next(); 
     if (!str1.equals(str2)) 
      System.out.println(str1 + " != " + str2); 
    } 
    while (sc1.hasNext()) 
     System.out.println(sc1.next() + " != EOF"); 
    while (sc2.hasNext()) 
     System.out.println("EOF != " + sc2.next()); 
    sc1.close(); 
    sc2.close(); 
} 
2

Это зависит от того, как вы хотите, сравнение идти (например, слово в слово, символ по полукокса), то есть с учетом

Hello this is India 

и

Hello this is Indonesia 

должен это выход:

  1. "Индия"/"Индонезия"?
  2. "ia" vs. "onesia"?

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

+0

сравнение словосочетание. Это простые строки , мы можем использовать цикл до следующего пробела, но что еще, если у меня есть много строк в текстовых файлах и как бы вы определили число слов. – JohnH

+0

конец строки также можно рассматривать как конец слова (это распространено). слово loouped, пока char не будет '' или '\ n' или '\ r'. Сделайте это в каждом файле, а затем произведите разные слова. –

-1
import java.io.*; 

public class CompareTextFiles { 

    public static void main(String args[]) throws Exception { 

     FileInputStream fstream1 = new FileInputStream("C:\\text1.txt"); 
     FileInputStream fstream2 = new FileInputStream("C:\\text2.txt"); 

     DataInputStream in1= new DataInputStream(fstream1); 
     DataInputStream in2= new DataInputStream(fstream2); 

     BufferedReader br1 = new BufferedReader(new InputStreamReader(in1)); 
     BufferedReader br2 = new BufferedReader(new InputStreamReader(in2)); 

     String strLine1, strLine2; 


     while((strLine1 = br1.readLine()) != null && (strLine2 = br2.readLine()) != null){ 
      if(strLine1.equals(strLine2)){ 
       System.out.println(strLine1); 

      } 
     } 
    } 
} 
Смежные вопросы