2

次の形式の文字列を取得しました:yyyyMMdd_HHmm_ss_unitCode_(status)。各コンポーネントを専用クラスのプロパティにマップする必要があります。

次のような正規表現でトークンを定義することを考えました: {d+}4{d+}2{d+}2_{d+}2_{d+}2_{s+}3_{s+}2=>おおよその正規表現構文についてお詫びします。dは10進数、sは文字列です。

{d+}4最初のグループはクラスの「年」プロパティに、2番目のグループは「月」に移動する必要があることをパーサーにどのように伝えることができますか。

明らかに、私はこれを行うことができました:token.setYear(substring(0,4))しかし、ファイル名の構造を制御できないので、もう少し一般的にしたかったのです。また、保存して入力するstartPosition、endPosition、属性名を使用してxml構造を定義することも検討しました。

全体として、私はこれらすべてが非常に複雑すぎると思いました。問題は、を使用できるようにするための単一のセパレーターがないことですString.split

4

1 に答える 1

0
String input; // yyyyMMdd_HHmm_ss_unitCode_(status)
SpecialClass output;

String regex = "(\\d{4})(\\d{2})(\\d{2})_(\\d{2})(\\d{2})_(\\d{2})_([^_]+)_\\((.+)\\)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);

if (m.matches())
{
    output.year = m.group(1);
    output.month = m.group(2);
    // etc
}

入力例:

String input = "20120113_1234_27_500_(33)";

次のグループを作成します。

Group 1: 2012 //year
Group 2: 01   //month
Group 3: 13   //day
Group 4: 12   //hour
Group 5: 34   //minute
Group 6: 27   //second
Group 7: 500  //unitcode
Group 8: 33   //status

テストプログラム: http: //pastebin.com/upC5R9rP

于 2012-01-12T17:28:22.913 に答える