1

こんにちは、私は最近、最後の 3 つのグループの数字を抽出しなければならないコードを開発していました。したがって、パターンを使用してデータを抽出しました。しかし、私は理解できませんでした。誰でもそれを理解するのを手伝ってもらえますか??

    String str ="EGLA 0F 020";
    String def = "ALT 1F 001 TO ALT 1F 029";
    String arr[] = def.split("TO");
    String str2 = arr[0];
    System.out.println("str2:"+str2);
    Pattern pt = Pattern.compile("[0-9][0-9][0-9]$");
    Matcher m1 = pt.matcher(str);
    Matcher m2 = pt.matcher(str2);
    boolean flag = m1.find();
    boolean flag2 = m2.find();
    if(flag)
        System.out.println("first match:::"+m1.group(0));
    else 
        System.out.println("Not found");
    if(flag2)
        System.out.println("first match:::"+m2.group(0));
    else
        System.out.println("Not found");

上記のコードに対して生成される出力は次のとおりです:::

    str2:ALT 1F 001 
    first match:::020
    Not found

ここで立ち往生している私に返信してください??

4

3 に答える 3

2

分割すると、末尾にスペースがあるからです。

String str = "EGLA 0F 020";
String str2 = "ALT 1F 001 ";
//                       ^ trailing space

あなたはそれをいくつかの方法で修正することができます。例えば:

  • 分割することによって" TO "
  • 結果のトリミング
  • 正規表現で末尾のスペースを許可します。

たとえば、この変更は機能します。

String arr[] = def.split(" TO ");
于 2011-10-17T13:37:42.460 に答える
0

分割が文字でのみ有効であることに気付いた場合"TO"、それは str2 パターンが であることを意味し"ALT 1F 001 "ます。

これを解決するには、作業 TO を囲むスペースも削除されるように、"\s*TO\s*"代わりに分割を試みることができます。"TO"別の解決策は、パターン"[0-9][0-9][0-9]$""[0-9][0-9][0-9]"final なしで置き換えて$、文字列の末尾のスペースを受け入れるようにすることです。

于 2011-10-17T13:41:10.397 に答える
0

このパターンを試してください:

Pattern pattern = Pattern.compile("[0-9][0-9][0-9]\\s*$"); 

また

Pattern pattern = Pattern.compile("[0-9]{3}\\s*$"); 
于 2011-10-17T13:45:45.480 に答える