- ベストアンサー
JSPでの文字列編集出力
JSPで文字列を読み込み、一部編集してデータベースに出力させようとしています。現在、文字列の編集の部分でうまくいかず困っています。 <tr> <td align="center"> </td> <td align="center">C 1</td> <td align="center">C 2</td> </tr> <tr> <td><font color="#FFFFFF">_</font>コスト</td> <td align="right"><font color="#FFFFFF">_</font>\ 200000<font color="#FFFFFF">_</font></td> <td align="right"><font color="#FFFFFF">_</font>\ 300000<font color="#FFFFFF">_</font></td> </tr> の内容を読み込み、タグを取り除き<tr>ごとに次の行として ,C 1,C 2 _,コスト,_,\200000,_,_,\300000,_ のように出力したいのです。 現在、String型で"<td"や">"と指定し、substring()やindexOf()を使いやっているのですが、 <td align="right"><font color="#FFFFFF">_</font>\ 300000<font color="#FFFFFF">_</font></td> のような、同じ行に2度出てくると初めしか文字列を取らなかったりしてうまくいきません。 違う方法や、アドバイスなどないでしょうか?また、XMLのDOMを使った方がいいのでしょうか?(XMLは全くわからないのですが、DOMを使えばもっと簡単にできるのでしょうか?) よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
おはようございます 文字列を駆使するよりは、char配列に分解してしまって、 状態遷移法的な解析をした方がスッキリしそうに思えます。 public static void main(String[] args) { String htmlDoc= "<tr>" + "<td align=\"center\"> </td>" + "<td align=\"center\">C 1</td>" + "<td align=\"center\">C 2</td>" + "</tr>" + "<tr>" + "<td><font color=\"#FFFFFF\">_</font>コスト</td>" + "<td align=\"right\"><font color=\"#FFFFFF\">_</font>\\ 200000<font color=\"#FFFFFF\">_</font></td>" + "<td align=\"right\"><font color=\"#FFFFFF\">_</font>\\ 300000<font color=\"#FFFFFF\">_</font></td>" + "</tr>"; StringBuffer sbResult= new StringBuffer(); char[] doc= htmlDoc.toCharArray(); boolean tagFlg= false; // true時はタグとして解析 for (int i= 0; i< doc.length; i++){ if (tagFlg== true){ // タグ読みモード // 終了文字'>'が来たらタグモード終了 if (doc[i]== '>'){ tagFlg= false; } continue; } else{ // テキスト読みモード // 開始文字'<'ならタグモードへ移行 if (doc[i]== '<'){ tagFlg= true; continue; } else{ sbResult.append(doc[i]); } } } // 結果出力 System.out.println(sbResult); } ▼コンソールに出てきた結果 C 1C 2_コスト_\ 200000__\ 300000_ 力尽きたのでタグ取り作業しかしていませんが、 タグモードの時に中身を一時バッファを溜め込んでおいて テキストモードになった時、"/tr"は無視して、 "tr"を見つけたら改行コードを sbResult に追加書き込み してやればいいですね。 でもやっぱり用意されているDOMライブラリ使った方が ラクですしバグも出にくいと思います…。 HTMLドキュメント全体をツリー構造と捉えることが出来てますし、 後付編集なども可能ですから…。 参考までに私が依然使っていたHTMLParcerライブラリを張っておきます。 他にもXML/DOM/HTML等の解析ライブラリはあるので気に入ったものを探してみるのも良いと思います。
その他の回答 (1)
DOMを使った方がいいと思います。 と、書いたところで、質問者さんの同様の質問に回答したものの、返答も締め切りもされていないことに気づいたので、これ以上のコメントは控えさせていただきます。 (DOMを使った方が・・・って私の前回の回答ですよね・・・?)