電子書籍の厳選無料作品が豊富!

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);
}

}

}

}

しかしこの処理だと最初のタグしか読んでくれず、次のタグの呼び出し方が思い浮かびません。
どなたかご助言をお願いいたします。

A 回答 (2件)

//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);
}
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/14 16:57

タブは\tを使います。



スペースは\sを使います。

ダブルクォーテーション内で使うときはエスケープシーケンスとして、\を更に追加する必要があります。\\t、\\sなど。

多分、できると思います・・

では、頑張ってください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/14 16:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!