【问题标题】:how to convert HTML text to plain text? [duplicate]如何将 HTML 文本转换为纯文本? [复制]
【发布时间】:2011-04-06 04:43:49
【问题描述】:

朋友的 我必须从url解析描述,其中解析的内容很少有html标签,所以我怎样才能将它转换为纯文本。

【问题讨论】:

标签: java html


【解决方案1】:

是的,Jsoup 将是更好的选择。只需执行以下操作即可将整个 HTML 文本转换为纯文本。

String plainText= Jsoup.parse(yout_html_text).text();

【讨论】:

  • 为了保留换行符,您现在还可以使用Jsoup.parse(html).wholeText()
【解决方案2】:

去掉 HTML 标签很简单:

// replace all occurrences of one or more HTML tags with optional
// whitespace inbetween with a single space character 
String strippedText = htmlText.replaceAll("(?s)<[^>]*>(\\s*<[^>]*>)*", " ");

但不幸的是,要求从来没有那么简单:

通常,&lt;p&gt;&lt;div&gt; 元素需要单独处理,可能有带有 &gt; 字符(例如 javascript)的 cdata 块会弄乱正则表达式等。

【讨论】:

【解决方案3】:

您可以使用这一行来删除 html 标记并将其显示为纯文本。

htmlString=htmlString.replaceAll("\\<.*?\\>", "");

【讨论】:

    【解决方案4】:

    使用像htmlCleaner这样的HTML解析器

    详细解答:How to remove HTML tag in Java

    【讨论】:

      【解决方案5】:

      使用 Jsoup。

      添加依赖

      <dependency>
        <!-- jsoup HTML parser library @ https://jsoup.org/ -->
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.13.1</version>
      </dependency>
      

      现在在您的 java 代码中:

      public static String html2text(String html) {
              return Jsoup.parse(html).wholeText();
          }
      

      只需调用方法 html2text 并传递 html 文本,它将返回纯文本。

      【讨论】:

        【解决方案6】:

        我建议通过 jTidy 解析原始 HTML,它应该会为您提供可以编写 xpath 表达式的输出。这是我发现的最可靠的 HTML 抓取方式。

        【讨论】:

          【解决方案7】:

          如果你想像浏览器显示一样解析,使用:

          import net.htmlparser.jericho.*;
          import java.util.*;
          import java.io.*;
          import java.net.*;
          
          public class RenderToText {
              public static void main(String[] args) throws Exception {
                  String sourceUrlString="data/test.html";
                  if (args.length==0)
                    System.err.println("Using default argument of \""+sourceUrlString+'"');
                  else
                      sourceUrlString=args[0];
                  if (sourceUrlString.indexOf(':')==-1) sourceUrlString="file:"+sourceUrlString;
                  Source source=new Source(new URL(sourceUrlString));
                  String renderedText=source.getRenderer().toString();
                  System.out.println("\nSimple rendering of the HTML document:\n");
                  System.out.println(renderedText);
            }
          }
          

          我希望这也有助于以浏览器格式解析表格。

          谢谢, 象头神

          【讨论】:

          • 投反对票的人能否解释一下他们投反对票的原因?
          【解决方案8】:

          我需要包含 FreeMarker 标签的一些 HTML 的纯文本表示。问题是通过 JSoup 解决方案交给我的,但 JSoup 正在转义 FreeMarker 标记,从而破坏了功能。我还尝试了 htmlCleaner (sourceforge),但留下了 HTML 标题和样式内容(已删除标签)。 http://stackoverflow.com/questions/1518675/open-source-java-library-for-html-to-text-conversion/1519726#1519726

          我的代码:

          return new net.htmlparser.jericho.Source(html).getRenderer().setMaxLineLength(Integer.MAX_VALUE).setNewLine(null).toString();
          

          maxLineLength 确保不会人为地将行换行为 80 个字符。 setNewLine(null) 使用与源相同的换行符。

          【讨论】:

            【解决方案9】:

            我使用HTMLUtil.textFromHTML(value) 来自

            <dependency>
                <groupId>org.clapper</groupId>
                <artifactId>javautil</artifactId>
                <version>3.2.0</version>
            </dependency>
            

            【讨论】:

              【解决方案10】:

              使用 Jsoup,我得到了同一行中的所有文本。

              所以我使用以下代码块来解析 HTML 并保留新行:

              private String parseHTMLContent(String toString) {
                  String result = toString.replaceAll("\\<.*?\\>", "\n");
                  String previousResult = "";
                  while(!previousResult.equals(result)){
                      previousResult = result;
                      result = result.replaceAll("\n\n","\n");
                  }
                  return result;
              }
              

              不是最好的解决方案,但解决了我的问题:)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-09-24
                • 2012-04-12
                • 2014-09-08
                • 2010-09-22
                • 1970-01-01
                • 1970-01-01
                • 2015-09-08
                • 1970-01-01
                相关资源
                最近更新 更多