2012-02-22 14 views
0

タグ間のテキストを削除し、タグを文字列配列に追加しようとしています。例えばタグ間のテキストを削除します。

: < TAG1> < TAG2> Iで線によってテキスト文書の行を読み取り、各タグを付加すること、アレイに開いたり閉じ、なしいこの</TAG2> </TAG1>

を除去間のテキストが、私は問題を抱えています。

私はString [] tags = text.nextLine()。split( "");を持っています。しかし、私は正規表現が配列[タグ1、タグ2、/タグ2、/タグ1]を持っている必要があるか分からない

ありがとう!

答えて

2

あなたはこの記述することができます。

String[] tags = text.nextLine().split("(?:^|>)[^<]*(?:<|$)"); 

をが、それは本当のXMLパーサーを使用することはおそらく安全です。コメント<!-- ... -->または処理指示<? ... ?>またはその他のものがある場合、またはいずれかのタグに>(たとえば、<span title='12 > 11'>)が含まれている場合、またはその他のさまざまな場合に、上記は間違いになることに注意してください。正規表現はXMLを解析するための優れたツールではありません。


編集、追加し

を空の最初の要素を持つ避けるために、あなたが最初のタグの前に、すべてを取り除くために前処理のビットを行う、それに応じてsplitを調整することができます。

String[] tags = text.nextLine().replaceFirst("^[^<]*<?").split(">[^<]*(?:<|$)"); 

(注:text.nextLine()にタグが一切含まれていない場合は、空の要素が1つだけの配列になります。それでも除外するには、上記の2番目のステップとして行うことができます:

if(tags.size == 1 && tags[0].isEmpty()) 
    tags = new String[0]; 

+0

この割り当てのポイントは、スタックを使用してファイルの有効性をチェックする独自のXMLパーサーを作成することです。上記の式はタグ[0]が常に ""であることを除いて機能します。最初の空の要素を取り除くための何かがありますか? – Steve

+0

@スティーブ:私はそれに対処するために私の答えを更新しました。 – ruakh

1

XMLは正規表現ではないため、正規表現だけでは解析できません。それは基本的なコンピュータ科学です。あなたは仕事に間違ったツールを使用しています。

私はこれが学生の練習であることは知っていますが、生徒は時々スクラップハンマーでナッツを割るような割り当てを設定されますが、どのコンピュータープロフェッショナルからの応答でも、それはそれを行う方法ではありません。

関連する問題