0

複数のマスクを持つ文字列がいくつかあります。String.spilt ではなく、マスク解析を使用して文字列を処理し、トークンをループしてシーケンスなどを識別するより良い方法があることを知りたいです。

サンプルマスクは次のとおりです。

  1. PROD-LOC-STATE-CITY
  2. PROD-DEST-STATE-ZIP
  3. PROD-OZIP-DZIP-VER-INS

サンプル文字列:

  1. CoolDuo-GROUND-NYC-10082

サンプルコード:

 String[] arr = input.split("-");
 int pos = 0;
 for(String k:arr){

  if(pos == 0) {
     //-- k is of PROD
     ...
     ...
  }
  ..
  ...

  pos++;
}

上記のタイプのコードは、マスク タイプごとに保持されます。

4

2 に答える 2

7

正規表現グループを使用して、グループ名http://docs.oracle.com/javase/tutorial/essential/regex/groups.htmlでターゲット文字列を取得できます。JavaでこのRegex Named Groupsを確認してください

名前付きグループを使用できない場合は、次の方法で行うことができます (文字列構造に完全に確信がある場合)。

final static int PROD_POS = 1;
final static int STATE_POS = 3;

...

Pattern pattern = Pattern.compile("(some_regexp)-(some_regexp)-(some_regexp)");
Matcher matcher = pattern.matcher(input);

if ( matcher.matches() ) {
    String state = matcher.group(STATE_POS);
}
于 2013-08-05T21:35:46.163 に答える
0

マスクが大きくなりすぎて管理できなくなったときに、この問題を本当に深く掘り下げたい場合は、Java で利用できるある種の字句解析パッケージを使用できます。

それが実際に何を意味するのかを知りたい場合は、ここを見てください ( http://en.wikipedia.org/wiki/Lexical_analysis )

Java の人気のあるパッケージは JFlex ( http://jflex.de/ ) ですが、他にもたくさんあります。

幸運を祈ります

于 2013-08-05T21:50:05.747 に答える