1

私が見つけたSOのサンプルコードと検索中の文字列を使用して、航空機クラスとその座席のグループをキャプチャしようとしています。入力ファイルには、J28W36Y156 という形式の航空機構成が含まれています。これは、28 席の J (ビジネス) クラス、36 席の W (プレミアム エコノミー席)、および 156 席の Y (エコノミー席) を意味します。

私が使用しているJavaコードは次のとおりです。

    s = "J12W28Y156";
    patternStr = "(\\w\\d+)+";
    p = Pattern.compile(patternStr);
    m = p.matcher(s);
    if (m.find()) {
        int count = m.groupCount();
        System.out.println("group count is "+count);
        for(int i=1;i<=count;i++){
            System.out.println(m.group(i));
        }
    }

正規表現は、LAST クラスの座席構成のみをキャプチャするようです。Y156. この正規表現を取得して、複数のグループのすべてのクラス/座席の組み合わせを取得するにはどうすればよいですか? これは、指定する必要がある「貪欲な」一致と関係がありますか? 出力を配列のようなものにしたいと思います。

{J12、W28、Y156}

みんなありがとう。

4

1 に答える 1

6

あなたの最初の間違いは の間違った解釈です\w。javadoc の内容は次のとおりです。

\w A word character: [a-zA-Z_0-9]

\w文字と数字の両方をキャプチャすることを意味します。したがって、あなたの場合、文字は常に大文字であることを考慮して、次のパターンを使用します。

[A-Z]\d+

これで、1 位のマーカーが取得されます。したがって、ループを自分で実装する必要があります。

Pattern p = Pattern.compile("([A-Z]\\d+)");
Matcher m = p.matcher(str);
while (m.find()) {
    String place = m.group(1);
    // A12, W28 etc is here
}
于 2012-12-30T08:34:46.150 に答える