2012-01-27 6 views

答えて

0

あなたは、次のコード(Java 5のAPI java.util.Scannerを使用しています)を使用することがあります。

Scanner scanner = new Scanner(new File("YourFilePath")); 
    String prev = null; 
    String current; 
    while (scanner.hasNextLine()) 
    { 
     current = scanner.nextLine(); 
     if (current.contains("YourRegEx")) 
      break; 
     else 
      prev = current; 
    } 
    String next = scanner.nextLine(); 

をあなたが必要とするString next = scanner.nextLine()

1

ファイルを1行ずつ読み込み、文字列(regexpまたはString.indexOf( "")のいずれか)に一致させます。前のn行をメモリに保存しておけば、文字列にマッチしたときにそれらを印刷することができます。ファイルを1行ずつ読み込むには、BuffereReader.readLine()を使用してください(実際には、BufferedReaderを使用すると、ジャンプバックできないため、実際にはさらに複雑になります)。 または柔軟性を高めるためにRandomAccessFile。この方法では、あなたの位置をマークし、次のm行を印刷して戻って、どこを離れた場所から検索を続けることができます。

1

擬似コード:

initialize a Queue 
for each line 
    if line matches regex 
     read/show lines from queue; 
     read/show next lines; 
    else { 
     if queue size > 30 
      queue.remove() // removes head of the queue 
     add this line to queue; 
    } 

あなたが前の行を保存するために、正規表現に対してラインをチェックするためのライン、Patternでファイルの行を読み取るためにBufferedReaderを使用して、Queueことができます。

+0

prevがnullとscanner.hasNextLine()を呼び出していないことのために追加のチェックを追加することもできます検索文字列が出現するたびに前の30行と次の50行を印刷します。あなたの擬似コードは実際にはそうではありません... –

+0

編集の前に、質問は30行 - 「行の上と下」を言及しませんでした。今すぐコードを編集する。 – Marcelo

+0

はい、私はそれを "grep -A 30 -B 50 'hello'"から控除しました:D –

関連する問題