2016-04-11 11 views
0

文字列がファイルのどの行にも現れるかどうかを返すようにしています。ファイルのデータを文字列と比較しようとしています

現在のところ、コンソールでは、私のifelseの両方の出力を出力します。私はどこに間違っているのか分かりません。 trueまたはfalseが必要です。両方の値ではありません。これは私がコンソールに得るものです:

0: - 
String False 
1: File String, ThisString 
String False 

ここに私の方法です:

public void checkString() { 
    int line = 0; 
    //fileString = false; 
    while (scanner.hasNext()) { 
     String str = scanner.nextLine(); 
     System.out.println(line + ": " + str); 
     line++; 
     if (str.contains(string)) { 
      System.out.println("File String," + string); 
      fileString = true; 
     } else { 
      System.out.println("String False"); 
     } 
    } 
} 

追加コードは明らかに存在し、これは私が上でハングアップしていますセクションです。それは、私が読んでいる特定のファイルへのパスに従います。質問の詳細:コードが真であればアクションを実行し、偽の場合には全く別のアクションを実行したい、またはelseステートメントで実行したい。あなたの文字列を含む行を見つけることについて行くことができる

+0

さて、あなたはループに入っています。ループをはじめて見ると、もう1つは印刷され、2回目に印刷されます。だから、あなたは2つの出力を見るのです。内部の代わりにループの外側に何かを印刷したいと思うように思えますが、あなたの質問は完全にはっきりしておらず、私はあなたが何をしたいのか分かりません。 – ajb

+0

私が行ったファイルを読むためにコードを取得しようとしていました。次に、各行をクラスで宣言したString varと比較するコードを作成します。行に。文字列が含まれている場合、またはその逆の場合は、ファイル内に文字列が存在することを伝えたい場合は、文字列が存在しないことを伝えてください。上記のプロセスを単純なコードで試してみたところ、やや混乱しました。 –

+0

その行に文字列が含まれている場合は、そのファイルに文字列が含まれていることを知っているので、それ以上ファイルを読み込む必要はありません。 'break'文を使うことができます。一方、ファイル全体を読み取るまでは、ファイルに文字列が含まれていないとは判断できません。したがって、ファイルに文字列が含まれていないことを示す行は、ループの後まで出力できません。 – ajb

答えて

2

一つの方法は、このようなものです:

public String lineContaining(String someString) { 
    int lineNumber = 0; 
    while (scanner.hasNext()) { 
     String eachLine = scanner.nextLine(); 
     System.out.println(lineNumber + ": " + eachLine); 
     lineNumber++; 
     if (eachLine.contains(someString)) { 
      System.out.println("Found string " + someString 
        + " in line " + lineNumber + ": " + eachLine); 
      return eachLine; 
     } 
    } 
    return null; 
} 

この方法は、(あなたのscannerによって供給されている)各ラインを通過し、それがsomeStringが含まれているかどうかをチェックします。そのような行がある場合、それはそれを返します(したがって、whileループから抜ける)。そうでない場合、メソッドはnullを返します。つまり、探している行が含まれていないことを意味します。あなたはその行が必要な場所からこれを呼び出すことができます。その結果にヌルチェック(== null)を実行して、行が見つかったかどうかを確認し、それに応じて処理を進めます。文字列が見つかった行番号などの詳細情報が必要な場合は、文字列(部分文字列が見つかった行)と整数(行番号)を持つ単純なラッパーオブジェクトを作成することをお勧めします。そのメソッドはStringの代わりにそのラッパーを返すことができます。の反復性を強調し、eachLineからstr(Smalltalkのからの習慣、私はlineNumberにごline変数の名前を変更しました

注意(それは文字列ではなくint型だように私の意見では、lineが鳴ります)変数)。

関連する問題