2011-09-14 35 views
1

私は、テキストファイルの日付がどのようになっているかを投稿することから始めます。これはその4行だけです。実際のファイルは数百行です。テキストファイルからデータを取り除く

2011年9月9日(金曜日)
-STV 101 -------- 5時00分 - 23時59分SSB 4185レポートプリント2011年9月8日の午前2時37

0-AHで104 -------- 07:00 - 23:00 AH GYMレポート2011年9月8日印刷時2:37

-BG 105 -------- 07:00 - 23 :00 SH GREAT HALLレポート2011年9月8日に印刷された2:37

私はこのテキストファイルで何をしたいのですが、最初の行は無視されて、その上の ' - 'は無視されます。次の行が、 "STV 101"、 "5:00"、 "23:59"を読み込んでvariに保存してくださいその行の他のすべての文字を無視して、それ以降の行ごとに続けます。

ここでは、私が現在どのように行全体を読み上げているかを示します。そして、ユーザーがscheduleTxt JTextfieldにパスを入れたら、この関数を呼び出します。各行を読み込み、印刷することができます。

public void readFile() throws IOException 
{ 
    try 
    { 
     FileInputStream fstream = new FileInputStream(scheduleTxt.getText()); 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String strLine; 

     while ((strLine = br.readLine()) != null) 
     { 
      System.out.println (strLine); 
     } 
     in.close(); 
    } 
    catch (Exception e){//Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    } 
} 

UPDATE: it turns out I also need to strip Friday out of the top line and put it in a variable as well Thanks! Beef.

答えて

3

Did not test it thoroughly, but this regular expression would capture the info you need in groups 2, 5 and 7: (Assuming you're only interested in "AH 104" in the example of "0-AH 104----") ^(\S)*-(([^-])*)(-)+((\S)+)\s-\s((\S)+)\s(.)*

String regex = "^(\\S)*-(([^-])*)(-)+((\\S)+)\\s-\\s((\\S)+)\\s(.)*"; 
    Pattern pattern = Pattern.compile(regex); 
    while ((strLine = br.readLine()) != null){ 
     Matcher matcher = pattern.matcher(strLine); 
     boolean matchFound = matcher.find(); 
     if (matchFound){ 
      String s1 = matcher.group(2); 
      String s2 = matcher.group(5); 
      String s3 = matcher.group(7); 
      System.out.println (s1 + " " + s2 + " " + s3); 
     } 

    } 

式は、必要な情報のみをキャプチャするために非キャプチャグループで調整することができます。

正規表現の要素の説明:-で終わる非空白文字の

  1. ^(\S)*-一致グループ。 :代わりに^(.)*-であった可能性があります。最初の-の前に空白がある場合は機能しません。
  2. (([^-])*)-を除くすべての文字のグループに一致します。
  3. (-)+-の1つ以上のグループと一致します。
  4. ((\S)+) 1つ以上の非空白文字のグループに一致します。これは、グループ5でキャプチャされます。
  5. \s-\sホワイトスペースのグループに続いて、-に続いて空白が続きます。
  6. '((\ S)+)'これはグループ7に取り込まれます。
  7. \s(.)*空白文字の後には何も指定しません。スキップされます。

さらに詳しい情報はtutorialにあります。 便利なものもあります。cheatsheetsです。式を設計/デバッグするときには、regexp testing toolも非常に便利です。

+0

「0-AH 104 ----」の場合は「AH 104」のみが必要です。ありがとうございます。 – Beef

+0

更新:素晴らしい作業をして、より広範なバージョンのテキストファイルでテストしても問題なく動作しました。ありがとうございました – Beef

+0

詳細については、回答の式の要素の説明を追加しました –

関連する問題