• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字列をタグ区切りで出力したい・その2)

文字列をタグ区切りで出力したい・その2

このQ&Aのポイント
  • 質問者は、「文字列をタグ区切りで出力したい」というタイトルで質問を投稿し、回答をいただいたが、新たな問題が発生した。HTMLのタグに囲まれていない部分の文字列が出力されない状態である。どの処理を加えれば良いのか分からないので、助言を求めている。
  • 質問者は「文字列をタグ区切りで出力したい」というタイトルで質問を投稿し、回答をいただいたが、新たな問題が発生した。HTMLのタグに囲まれていない部分の文字列が出力されない状態になっている。どのような処理を追加すれば、正常に出力できるのか分からないため、アドバイスを求めている。
  • 質問者は「文字列をタグ区切りで出力したい」というタイトルで質問を投稿している。回答をいただいたが、新たな問題が生じた。HTMLのタグで囲まれていない文字列が出力されない状態になっているため、どのような処理をすれば解決できるのかわからない。アドバイスをお願いしたい。

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

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

public class Sample { public static void main(String[] args) { String html = "<html><title>題名</title><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; if (tagEnd < tagStart){ String innerText = html.substring(tagEnd, tagStart); System.out.println("innerText:"+ innerText); } tagEnd = html.indexOf(">", tagStart + 1) + 1; if (tagEnd == 0) break; String tag = html.substring(tagStart, tagEnd); String rep = tag.replaceAll("value=\"\"", "value=\"あああ\""); System.out.println("rep : " + rep); } } } ---------------------------------------------------------------- 本格的にやるつもりなら、HTML Parser とか使った方がいいと思います。 http://sourceforge.net/projects/htmlparser

satobe566
質問者

お礼

回答ありがとうございます。 お礼が遅くなってすみません(体調を崩していたもので)・・・。おかげさまで解決しました。 HTML Parserというツールがあるのですね。 早速試してみたいと思います。

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

関連するQ&A

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

    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); } } } } しかしこの処理だと最初のタグしか読んでくれず、次のタグの呼び出し方が思い浮かびません。 どなたかご助言をお願いいたします。

    • ベストアンサー
    • Java
  • Java正規表現-"ある文字列"を含まない文字列

    Javaの正規表現で、HTMLタグ以外の文字列を抽出しようとしています。 HTMLタグはの正規表現は"(</?.*>)"のように表しました。これの否定をしたいのですが、方法を教えて下さい。HTMLタグ以外にヒットさせたいです。 一応、現段階のソースを載せます。 import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HTMLInnerGetter { public static void main(String[] args){ String regex = "(</?.*>)"; String target = "<html><head><title>title</title></head><body><h1>head1<br><p>pragraph</p></body></html>"; ArrayList<String> innerHTMLs = new ArrayList<String>(); Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(target); while(matcher.find()){ innerHTMLs.add(matcher.group(1)); } System.out.println(innerHTMLs); } } 出力結果 [<html><head><title>title</title></head><body><h1>head1<br><p>pragraph</p></body></html>] ※否定できなかったので、HTMLタグがヒットしています。

    • ベストアンサー
    • Java
  • formタグのvalue="" に代入される文字列をsubmitボタン

    formタグのvalue="" に代入される文字列をsubmitボタンが押されたときに Javascriptでlocation.hrefで現在のURLを判定して 条件分岐してformタグのvalue="" に "A" や "B" といった 文字列を代入したいと考えてます。 現在下記のタグを書いているのですが、submitボタンが押されたときに パラメータにvalueの値が代入されず、困ってます。。。 タグの記述に間違いがあると思うのですが、ご指摘いただけないでしょうか? ■現在のタグ 1.Javascript側 <script> <!-- function check() { if(location.href.startsWith('http://www.AAA.com/AAA/')){ document.exp.categoryII.value = "A"; }else if(location.href.startsWith('http://www.AAA.com/BBB/')){ document.exp.categoryII.value = "B"; } return true; } // --> </script> 2.formタグ側 <form onsubmit="return check()" name="exp" action=""> <input name="gen" value="6" type="hidden" /> <input name="categoryII" value="" type="hidden" /> <input name="button" value="検索" type="submit" /> </form> よろしくお願い致します。

  • 入力した文字列から母音だけを出力するプログラム

    文字列を入力し母音だけを出力するプログラムを作りました。 以下だと小文字の母音しか出力できないので大文字にも対応させたいのですが、switch文のcaseを増やすと冗長になってしまう気がします。 switch文以外の方法でもっと簡潔に書く方法はありますか?ご教授お願い致します。 /* 入力した文字列のうち、母音「a,i,u,e,o」だけ出力する */ #include <stdio.h> #include <string.h> #define MAXSTR 256 int main(void) { char str[MAXSTR]; int i; gets(str); for (i = 0; i < strlen(str); i++) switch (str[i]) { case 'a': putchar(str[i]); break; case 'i': putchar(str[i]); break; case 'u': putchar(str[i]); break; case 'e': putchar(str[i]); break; case 'o': putchar(str[i]); break; } putchar('\n'); return 0; } 実行結果: What time is it now? aieiio

  • C++言語で文字列を出力するにはどうしたら良いですか。

    C++言語で文字列を出力するにはどうしたら良いですか。 今、ポインタの勉強中ですが、ポインタの使い方がよく分からないです。 次のコードで ---------- one two three ---------- を出力したいのですが、nしか出力できません。 どうやらoneのnしか出力できません。 どのようなコードを書いたら解決できますでしょうか。 ------------------------------------------- #include<iostream> using namespace std; char name[3][10]={{"one"},{"two"},{"three"}}; char f(const char *name,int i){ return name[i]; } int main(){ cout << f(name[0],1) << endl; } -------------------------------------------

  • 入力した文字列の文字コードを16進数で出力

    入力した文字列の文字コードを16進数で出力するプログラムを作っているのですが 下のように記述してもどうしても最後にaが表示されてしまいます。 打開策、または何故aが表示されるのかを教えてください。 #include <stdio.h> main() { int str; while(1){ str=getc(stdin); if(str==EOF) break; printf("%x ",str); } return 0; }

  • 文字列間の包含関係を調べるプログラム

    最近Javaを始めたばかりの初心者です。 キーボードから4つの文字列を読み込み、それらの文字列間の包含関係を調べるプログラムを作りたいのですが・・・ a,back,kick,ck と4つ入力したら、 aを含む  back backを含む  なし kickを含む  なし ckを含む  back  kick と出力する。 文字列が含まれる時の部分は以下のように作ってみたのですが、文字列が含まれない時に"なし"を1回だけ表示させる、というところが分かりません。(キーボード入力用のKeyBoard.classが別に用意してあります。) ヒントだけでも教えてもらえないでしょうか。 String[] S = new String[4]; for (int i = 0; i < 4; i++) {   S[i] = KeyBoard.readLine(); } for (int k = 0; k < 4; k++) {   System.out.println(S[k] + "を含む");   for (int j = 0; j < 4; j++) {     if (j != k) {       if (S[j].indexOf(S[k]) >= 0) {         System.out.println(" " + S[j]);       }     }   } }

  • 文字列を分割して変数に格納したい

    文字列を分割して変数に格納したいのですがうまくいきません。 ---以下ソース--- #include <stdio.h> #include <string.h> void main(void){ char tai[]="name1=value1&name2=value2&name3=value3&name4=value4"; char *tp; int a; int b; int i; int co=0; a=strlen(tai); for(i=0;i<a;i++){ if(tai[i] == '='){ co++; } } b=co; char *nameset[b]; char *valueset[b]; *nameset[0]=*strtok( tai,"&=" ); i=1; co=0; while ( tp != NULL ) { if(0==i%2){ co=i/2; *nameset[co] = *strtok( NULL,"&=" ); } else{ co=i/2; *valueset[co] = *strtok( NULL,"&=" );} i++; } for(i=0;i<b;i++){ printf("%s : %s\n",nameset[i],valueset[i] ) } } ---ソースここまで--- どうしたらちゃんと変数に格納されますか?

  • 何故ループがしてくれないんですか?

    口でいうよりもソースコード載せた方が早いので載せます import java.util.Scanner; class StudentsList2 { public static void main(String[] args){ System.out.println("学生番号(23,45,78,51,9)を入力してください>"); Scanner sc=new Scanner(System.in); StList list=new StList(); list.ID=new int[]{23,45,78,51,9}; list.name=new String[]{"荒川","神田","吉田","渡辺","木村"}; int key=Integer.parseInt(sc.next()); list.getName(key); } static class StList{ public String[] name; public int[] ID; void getName(int key){ for(int A=0; A<ID.length; A++){ if(key==ID[0]){ System.out.println(name[0]);break; }else{ if(key==ID[1]){ System.out.println(name[1]);break; }else{ if(key==ID[2]){ System.out.println(name[2]);break; }else{ if(key==ID[3]){ System.out.println(name[3]);break; }else{ if(key==ID[4]){ System.out.println(name[4]);break; } } } } } } } } } 例外処理もなくエラーもかえって来ないんですが一回しか学生名が出力しないです。 何故でしょうか? nameに入っている名前を出力しないといけないですよね。 「ここがおかしいよ」とかのアドバイスをお願いします

    • ベストアンサー
    • Java
  • C言語で文字列の出力の問題

    1行目に文字列aを出力し、2行目にaの各文字を2回づつ出力し、3行目にaの格文字の文字コードを出力する関数 void print_string(char a[]) を作成せよ。 この関数を print_string("abcd") で呼び出したときの出力は abcd aabbccdd 97 98 99 100 となる。 という問題なのですが、2行目と3行目をどうしたら文字列aの文字や文字コードを個別に出力できるのかわかりません。 1行目までしかできてないですが、次のが私の作ったプログラムです。 #include <stdio.h> void print_string(char a[]) { printf("%s\n",a); } int main (void) { print_string("abcd"); return(0); } よろしくお願いします。