1

テキスト ファイルの日付がどのように見えるかを投稿することから始めます。これはわずか 4 行で、実際のファイルは数百行の長さです。

2011 年 9 月 9 日金曜日
-STV 101--------05: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」を読み込むことです。それらを変数に保存してから、その行の他のすべての文字を無視し、その後の各行についても同様です。

これが私が現在行を完全に読んでいる方法です。そして、ユーザーが 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());
    }
}

更新:金曜日を一番上の行から取り除き、それを変数にも入れる必要があることがわかりましたありがとう!牛肉。

4

1 に答える 1

3

徹底的にテストしませんでしたが、この正規表現は、グループ 2、5、および 7 で必要な情報をキャプチャします: (「0-AH 104----」の例の「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)+)' 4 と同じ。これはグループ 7 でキャプチャされます。
  7. \s(.)*スキップされる空白の後に続くものと一致します。

正規表現の詳細については、このチュートリアルを参照してください。便利なチートシートもいくつかあります。式を設計/デバッグする場合、正規表現テスト ツールも非常に役立ちます。

于 2011-09-14T16:43:57.260 に答える