2012-04-13 11 views
2

_<A_>_<B_>_<Z_>を指定すると、配列内にA, B, Cを抽出します。Java - デリミタで分割

基本的に_<が開始区切り文字で、_>が終了区切り文字です。

+2

これまでに何を試しましたか?あなた自身を実装しようとして、実装上の問題に固有の質問をしてください。 – Deco

+0

'.replaceFirst("(?s)^ _ <(.*)_> $ "、" $ 1 ")split(" _> _ <")' –

+0

@Deco、そうです。私は非常に基本的だった、すなわち、シーケンシャルにデリミタを探し、配列を設定します。 – 500865

答えて

3

を取得するために_>_<ことによってそれを分割 - 最初に切り出しますオープニングと最後の閉じ、その後、あなたがタグのコンテンツのみを一致させるためにlookaround assertionsを使用することができます近くにオープン

string.replaceFirst("^_<(.*)_>$", "$1").split("_>_<"); 
+0

いいえ、全く分割しないでください。それはキャプチャグループのためのものです。 – nes1983

+0

+1これは完全に有効で実用的なソリューションです。 (そして、結果の配列を直接返します。私の解決策とは異なり、配列を作成する必要があります。) – stema

-2

capture groupsを使用して抽出します。シンプルだ

+0

どのようにグループから配列を取得できますか?:) from _ _ _ _ _ SergeS

+0

@SergeSそれはトリック質問ですか?あなたはただ一つ作るだけです。 リスト ret = new ArrayList (); for(int i = 1; i <= match.groupCount(); i ++){ ret.add(match.group(i)); } return ret; – nes1983

+0

グループで作業することができないので、コード例を表示してください。 – SergeS

-2
、2つの要素を取得する第二を取り、2つの要素を取得するために _>ことによってそれを分割し、第一を取るために _<によって

スプリットとA、B、C

+0

いいえ、全く分割しないでください。それはキャプチャグループのためのものです。 – nes1983

5

ことによってそれを分割します。

String text = "_<A_>_<B_>_<Z_>"; 

List<String> Result = new ArrayList<String>(); 

Pattern p = Pattern 
    .compile("(?<=_<)" + // Lookbehind assertion to ensure the opening tag before 
     ".*?" +   // Match a less as possible till the lookahead is true 
     "(?=_>)"   // Lookahead assertion to ensure the closing tag ahead 
     ); 
Matcher m = p.matcher(text); 
while(m.find()){ 
    Result.add(m.group(0)); 
} 
関連する問題