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を使えばもっと簡単にできるのでしょうか?)
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
おはようございます
文字列を駆使するよりは、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等の解析ライブラリはあるので気に入ったものを探してみるのも良いと思います。
参考URL:http://people.apache.org/~andyc/neko/doc/html/
No.2
- 回答日時:
DOMを使った方がいいと思います。
と、書いたところで、質問者さんの同様の質問に回答したものの、返答も締め切りもされていないことに気づいたので、これ以上のコメントは控えさせていただきます。
(DOMを使った方が・・・って私の前回の回答ですよね・・・?)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS HTMLで特定の文字だけ色を変えたいのですが、指定した色と違う色が反映してしまいます。 下記、「前」 5 2023/06/27 12:08
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- HTML・CSS CSSがなぜかfont-sizeだけ効かない...記述がまちがっているんでしょうか 5 2022/04/09 17:52
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- オープンソース cssで中央寄せ 1 2023/05/19 06:25
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オブジェクトの中のプロパティ...
-
requestの値が削除されません…
-
StrutsでJSPからListを受け取り...
-
全取得したデータをjspで順番に...
-
<s:iterator>の値をリストで取...
-
JSPにて、変数を利用してフォン...
-
PropertyNotFoundException解決...
-
hiddenの値が期待した値で取得...
-
データベースに変数の値を挿入
-
Java Struts ~に対するゲッタ...
-
サーブレットjspで勤怠スケジュ...
-
JSPでImportエラーになります
-
Javaで改行などが出来ないのです。
-
C言語のポインターに関する警告
-
カタカナの小文字を大文字に変...
-
java キーボード入力された値の...
-
JSPやサーブレットでSystem.out...
-
flush()とclose()について
-
javaで質問です。 文字列2023/2...
-
ループ処理の際、最後だけ","を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
オブジェクトの中のプロパティ...
-
JSPでImportエラーになります
-
hiddenの値が期待した値で取得...
-
StrutsでJSPからListを受け取り...
-
requestの値が削除されません…
-
Java Struts ~に対するゲッタ...
-
PropertyNotFoundException解決...
-
全取得したデータをjspで順番に...
-
<s:iterator>の値をリストで取...
-
データベースに変数の値を挿入
-
JSPにて、変数を利用してフォン...
-
JSPでDBからデータ読み込みブラ...
-
No such validation エラー
-
iterateで受け取った値を処理に...
-
StrutsのforEachについて
-
JSPからServletに、テーブルに...
-
サーブレットjspで勤怠スケジュ...
-
JSFタグ<h:dataTable>でヘッダ...
-
javaの環境変数の%CATALINA_HOM...
-
WebWork(struts2)でのパラメー...
おすすめ情報