質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

3回答

7606閲覧

[Java] HTML文字列から指定したタグを削除する方法

suran

総合スコア20

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2016/03/10 08:58

HTML文字列から下記のパターンで文字列を削除したいです。

①指定した親要素に対する子要素の最後のタグを削除する

例)

<div> <button id="btn1" class="btn ">test1</button> <button id="btn2" class="btn ">test2</button> <button id="btn3" class="btn ">test3</button> ←この行を丸ごと削除したい </div>

②指定したidのタグを削除する

例)idは「btn2」を指定

<div> <button id="btn1" class="btn ">test1</button> <button id="btn2" class="btn ">test2</button> ←この行を丸ごと削除したい <button id="btn3" class="btn ">test3</button> </div>

上記例では文字列が1つのString変数に丸ごと格納されているものとし、
改行は「\r\n」で行っているものとします。

正規表現で色々考えてみたのですが、対処できませんでした。
お力添えをいただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

DOM構築してくれるHtmlパーサを使ってみてはどうでしょうか。
jsoupが良い感じです。

以下のページが参考になります。
参考サイト

以下のように記述することができます。

Java

1Element element = document.getElementById("hoge");

環境がないので試していませんが・・
①はCSS Selectorの:last-childを使えば1行のコードで行けそう。
selector

②は↑のサンプルコードのgetElementByIdで行けるかと。

・・っと、スミマセン削除でしたね。
.remove()とすれば削除できると思います。

投稿2016/03/10 09:57

編集2016/03/10 10:06
lilithchan

総合スコア249

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まずはString#splitで配列に分割して、対象文字を含む行以外を再度連結しなおしてみてはどうでしょう。

投稿2016/03/10 09:16

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下のソースでできました

1または2入力で
1:指定した親要素に対する子要素の最後のタグを削除するか
2:指定したidのタグを削除するか
選択し

次に
1だと
div

2だと
btn2

などを入力するとhtmlから当該部分(またはその子部分)が削除され上書きされます 念のためhtmlのバックアップは必要だと思います

1の時 cssなどがhtml内に入っていてidがタグ以外でも使用されている場合はその行も削除されてしまいます

java

1import java.util.*; 2import java.io.*; 3class DE{ 4 5public static void main(String[] args){ 6 7ArrayList<String> s=new ArrayList<>(); 8ArrayList<String> s2=new ArrayList<>(); 9 10ArrayList<String> last=new ArrayList<>(); 11 12try(BufferedReader br=new BufferedReader(new FileReader("H.html"))){//HTMLのファイルパス 13 14String data=null; 15 16while((data=br.readLine())!=null){ 17 18s.add(data); 19 20} 21 22}catch(Exception e){} 23 24Scanner std=new Scanner(System.in); 25 26System.out.println("1 指定した親要素に対する子要素の最後のタグを削除する"); 27System.out.println("2 指定したidのタグを削除する"); 28 29System.out.print("入力:"); 30 31int a=std.nextInt(); 32 33if(a==2){ 34 35System.out.print("削除したい行のid:"); 36 37String val=std.next(); 38 39 40for(String s3:s){ 41 42if(s3.contains(val)){ 43}else{ 44s2.add(s3); 45} 46 47} 48 49try(BufferedWriter bw=new BufferedWriter(new FileWriter("H.html"))){ 50 51for(String f:s2){ 52 53bw.write(f); 54bw.newLine(); 55} 56 57 58}catch(Exception r){} 59 60 61}else if(a==1){ 62System.out.print("子要素の最後を削除するために指定したい親要素:"); 63String val=std.next(); 64 65for(int z=0;z<s.size();z++){ 66s2.add(s.get(s.size()-z-1)); 67} 68 69int flag=0; 70int lflag=0; 71for(int z=0;z<s.size();z++){ 72 73 74if(flag==1 && lflag==1){ 75flag=0; 76}else if(s.get(s.size()-z-1).contains(val) && lflag==1){ 77lflag=0; 78last.add(s.get(s.size()-z-1)); 79}else if(s.get(s.size()-z-1).contains(val) && lflag==0 && flag==0){ 80flag=1; 81lflag=1; 82last.add(s.get(s.size()-z-1)); 83}else{ 84last.add(s.get(s.size()-z-1)); 85 86} 87 88 89} 90 91s.clear(); 92for(int z=0;z<last.size();z++){ 93s.add(last.get(last.size()-z-1)); 94} 95 96try(BufferedWriter bw=new BufferedWriter(new FileWriter("H.html"))){ 97 98for(String f:s){ 99bw.write(f); 100bw.newLine(); 101} 102}catch(Exception r){} 103 104 105 106 107} 108 109 110 111} 112 113 114 115 116}

投稿2016/11/05 04:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問