Java HTML剥离

6yoyoihd  于 2022-12-02  发布在  Java
关注(0)|答案(3)|浏览(145)
//Method for Strip HTML
public static String stripHtml(String inStr) {
  boolean inTag = false;
  char c;
  StringBuffer outStr = new StringBuffer();
  int len = inStr.length();
  for (int i = 0; i < len; i++) {
    c = inStr.charAt(i);
    if (c == '<') {
      inTag = true;
    }
    if (!inTag) {
      outStr.append(c);
    }
    if (c == '>') {
      inTag = false;
    }
  }
  //Print to show that the this method is removing the necessary characters
  System.out.println(outStr);
  return outStr.toString();
}

因此,我需要清理所有包含〈〉的输出以及它们之间的所有内容,并且它仍然应该打印出剩余的字符。

input:app<html>le
expected:apple

但是如果它只找到“〈”或“〉,”它也应该删除,但我的方法没有这样做。

input:app<le
output:app<le
expected:apple

请让我知道要修什么。

ybzsozfc

ybzsozfc1#

尝试使用HTML解析器(如JSoup或TagSoup)来解析HTML。一旦有了DOM,就在根元素上调用getTextContent()
从API文档(Java的各个版本都不一样):* 此属性返回此节点及其后代的文本内容。[...]不执行序列化,返回的字符串不包含任何标记。*
另请参阅

wsewodh2

wsewodh22#

正如有人所说,它与Jsoup配合得很好。

String input = "app<html>le";
Document doc = Jsoup.parse(input);
System.out.println(doc.wholeText());  // or doc.text()

输出:

apple

但是您给出的示例不是一个正确的XML文档,不能使用XML解析器进行处理。
您也可以稍微修改程式。

public static String stripHtml(String inStr) {
    boolean inTag = false;
    StringBuffer outStr = new StringBuffer();
    int len = inStr.length();
    for (int i = 0; i < len; i++) {
        char c = inStr.charAt(i);
        if (c == '<') {
            inTag = true;
        } else if (c == '>') {
            inTag = false;
        } else if (!inTag) {
            outStr.append(c);
        }
    }
    return outStr.toString();
}

String input = "app<html>le";
System.out.println(stripHtml(input));

输出:

apple
hi3rlvi2

hi3rlvi23#

您的要求是移除配对的<...>,而不是行程唯一的<
这意味着代码在遇到>-时只能删除标记内字符
您的程式码也可以使用ìnt i2 = inStr.indexOf('>', i+1);,在<处寻找结尾的>
然而更简单的是使用正则表达式替换:

public static String stripHtml(String s) {
    return s.replaceAll("<[^>]*>", "");
}

这将搜索所有:

  1. <
  2. a非->,0次或多次(*
  3. >

相关问题