Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java】replaceAll()メソッドと正規表現で文字列からHTMLタグを削除する方法

JavaにおけるStringクラスfinal修飾子が付いた不変(イミュータブル)なクラスです。これは、一度生成されたStringオブジェクト自体は変更できないことを意味しますが、変数が参照するオブジェクトを別のインスタンスに差し替えることは可能です。

文字列からHTMLタグを取り除くには、StringクラスのreplaceAll()メソッドを使用します。このメソッドに正規表現を指定することで、「<」と「>」で囲まれたタグ部分を空文字列に置き換えられます。処理後の文字列は、プレーンなテキストとして返されます。

replaceAll()メソッドの構文

public String replaceAll(String regex, String replacement)
  • regex:マッチさせたいパターンを表す正規表現
  • replacement:マッチした部分を置き換える文字列

サンプルコード

public class RemoveHTMLTagsTest {
    public static void main(String[] args) {
        String str = "<p><b>Welcome to Tutorials Point</b></p>";
        System.out.println("Before removing HTML Tags: " + str);
        str = str.replaceAll("\\<.*?\\>", "");
        System.out.println("After removing HTML Tags: " + str);
    }
}

実行結果

Before removing HTML Tags: <p><b>Welcome to Tutorials Point</b></p>
After removing HTML Tags: Welcome to Tutorials Point

正規表現のポイント

使用している正規表現 "\\<.*?\\>" の各要素は次の通りです。

  • \\< … 文字「<」にマッチ
  • .*? … 任意の文字に最小限の回数でマッチ(非貪欲マッチ)
  • \\> … 文字「>」にマッチ

ここで重要なのは、.*ではなく.*?(非貪欲マッチ)を使う点です。貪欲マッチの.*を使うと、文字列内の最初の「<」から最後の「>」までが一括で削除され、タグ以外のテキストまで失われる恐れがあります。

補足:より堅牢な方法

正規表現による除去は手軽ですが、属性値の中に「>」が含まれるケースなど、実際のHTMLでは意図しない結果になる可能性があります。本番環境で信頼性の高いHTML解析やサニタイズが必要な場合は、Jsoupのような専用ライブラリの利用を検討することをおすすめします。

  1. JavaでNumberFormatException(非検査例外)を処理する方法をわかりやすく解説

    NumberFormatExceptionは、parseXXX()系のメソッドが文字列を数値に変換できなかった場合にスローされる非検査例外(unchecked exception)です。この例外はコンパイル時に強制されないため、開発者が適切に対処しないと実行時にプログラムが異常終了する原因となります。java.langパッケージのクラスには、NumberFormatExceptionをスローする可能性のあるメソッドやコンストラクタが多数存在します。代表的なものは以下の通りです。public static int parseInt(String s) throws NumberFormatExc

  2. Pythonで文字列の末尾から部分文字列を削除する方法

    Pythonで文字列の末尾から特定の部分文字列を削除したい場合は、まずその文字列が対象の部分文字列で終わっているかどうかを確認します。終わっている場合は、スライスを使って部分文字列を取り除いた残りの部分だけを取得します。endswith()とスライスを使う方法以下は、rchop関数を実装した例です。文字列が指定した末尾と一致するかをendswith()で判定し、一致すればスライスで末尾を切り取ります。def rchop(string, ending): if string.endswith(ending): return string[:-len(ending)]