2017-11-30 21 views
1

ここで2つの.txtファイルを比較すると、2番目のファイル内の文字列が最初に一致または繰り返す場合、最初のファイルの行番号が返されます。ネストされたループの最初のwhileループが1回だけ繰り返す

ここでコードでは、最初のwhileループが1回だけ繰り返します。

Scanner scanner = new Scanner(firstFile); 
Scanner scanner1 =new Scanner(secondFile); 
int lineNum = 0; 
while (scanner.hasNextLine()) 
    { 
     String line = scanner.nextLine(); 
     lineNum++; 
     while (scanner1.hasNextLine()) 
     { 
       String line1 = scanner1.nextLine(); 
       if(line.contains(line1)) 
       { 
        System.out.println("Ignore/Review line number: "+lineNum);  
       } 
     } 
    }    
+0

'Scanner'の代わりに' BufferedReader'や 'LineNumberReader'を使って行を読み上げます。実際には、ファイルのサイズに応じて、少なくとも1つの完全なファイルを読み込み、その行をリストに保存して、別のファイルの各行に読み込まないようにすることを検討します。 –

+0

リストに2番目のファイルを保存するようです良いオプションです。私は試してみる、ありがとう。 – Scitech

答えて

4

あなたが外whileループ内の第二のファイルのScannerを作成する必要があります。全体の第二のファイルだったので、

Scanner scanner = new Scanner(firstFile); 
int lineNum = 0; 
while (scanner.hasNextLine()) { 
    String line = scanner.nextLine(); 
    lineNum++; 
    Scanner scanner1 =new Scanner(secondFile); 
    while (scanner1.hasNextLine()) { 
     String line1 = scanner1.nextLine(); 
     if(line.contains(line1)) { 
      System.out.println("Ignore/Review line number: "+lineNum);  
     } 
    } 
} 

そうでない場合scanner1.hasNextLine()戻りfalseアウターwhileループの2回目の繰り返し上をすでに外側ループの最初の反復で読み取られます。

+0

私はそれを今得ました。私にこれを理解させてくれてありがとう。 – Scitech

0

この問題は、2番目のwhileループが決してキャンセルされないという事実に関連しています。することができます、この後

if(line.contains(line1)) 
{ 
    System.out.println("Ignore/Review line number: "+lineNum); 
    break; 
} 

:したがって、あなたはファイル2で一致する行を見つけたとき、あなたはおそらく、欲しいファイル2内の他のすべての行にファイル1の行を比較することに行くことは、このようなものですAMDファイルの終わりに到達した外側の最初のループの間にファイル全体を読み取る第二のファイルのファイル2.

+0

あなたの答えをありがとう。 2行目と2行目を比較していません。ファイル全体を他のファイルの1行と一度に比較し、その行を繰り返します(他のファイル)。私は私の答えがはっきりしていることを発見しました。 – Scitech

1

Scannerの次の行にファイル1の次の行を比較しに行く(読み取ることは何もしてい次の外側Whileループ)。外側のwhileループのボディに2番目のScannerを作成して、外側のループの開始ごとに最初から選択した2番目のファイルを読み込ませる必要があります。

関連する問題