Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

文字列をタブ区切りで出力したい

HTMLファイルをタグごとに区切って、value属性を持つものには、value=""のダブルクオートの 中に文字列を入れて、以下のように出力させたいと思っています。 <html> <body> <input type="text" name="name" value="出力させたい値"> </body> </html> そのため、以下のクラスを作成しました。 public class Sample { private static final String findValue = "value=\""; private static final int valueLen = findValue.length(); public static void main(String[] args) { String html = "<html><body><input type=\"text\" name=\"name\" value=\"\"></body></html>"; StringBuffer sb = new StringBuffer(html); int tagStart = sb.indexOf("<"); int tagEnd = sb.indexOf(">") + 1; if (tagStart >= 0 && tagEnd > 0) { String tag = sb.substring(tagStart, tagEnd); System.out.println("tag : " + tag); int valueIndex = tag.indexOf(findValue) + valueLen;// パラメータ挿入開始位置 if (valueIndex > valueLen) { String tagLeft = tag.substring(0, valueIndex); String tagRight = tag.substring(valueIndex, tag.length()); String ret = null; ret = tagLeft + "あああ" + tagRight; System.out.println("ret : " + ret); } } } } しかしこの処理だと最初のタグしか読んでくれず、次のタグの呼び出し方が思い浮かびません。 どなたかご助言をお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

//1つの方法 public static void main(String[] args) { String html = "<html><body><input type=\"text\" name=\"name\" value=\"\"></body></html>"; int tagStart = 0; int tagEnd = 0; while(true){ tagStart = html.indexOf("<", tagEnd); if(tagStart == -1) break; tagEnd = html.indexOf(">", tagStart + 1) + 1; if(tagEnd == 0) break; String tag = html.substring(tagStart, tagEnd); String rep = tag.replace("value=\"\"","value=\"あああ\""); // System.out.println("tag : " + tag); System.out.println("rep : " + rep); } }

satobe566
質問者

お礼

ありがとうございます。無事成功しました! 色々なやり方があるものですね。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

タブは\tを使います。 スペースは\sを使います。 ダブルクォーテーション内で使うときはエスケープシーケンスとして、\を更に追加する必要があります。\\t、\\sなど。 多分、できると思います・・ では、頑張ってください。

satobe566
質問者

お礼

あせっていたので、エスケープシーケンスのことまでは考えていませんでした。 ありがとうございます!

すると、全ての回答が全文表示されます。

関連するQ&A