如何将HTML文本转换为纯文本?

时间:2010-08-31 10:03:11

标签: java html

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

10 个答案:

答案 0 :(得分:21)

删除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*<[^>]*>)*", " ");

但不幸的是,要求从未如此简单:

通常,<p><div>元素需要单独处理,可能存在带有>字符的cdata块(例如javascript),这会破坏正则表达式等。

答案 1 :(得分:8)

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

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

答案 2 :(得分:4)

使用像htmlCleaner

这样的HTML解析器

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

使用 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 :(得分:0)

如果要像浏览器显示一样进行解析,请使用:

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);
  }
}

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

谢谢, 内甚

答案 7 :(得分:0)

我需要一些HTML的纯文本表示形式,其中包括FreeMarker标签。这个问题是通过JSoup解决方案解决的,但是JSoup逃避了FreeMarker标签,从而破坏了功能。我也尝试了htmlCleaner(sourceforge),但是留下了HTML标头和样式内容(已删除标签)。 http://stackoverflow.com/questions/1518675/open-source-java-library-for-html-to-text-conversion/1519726#1519726

我的代码:

#! /usr/bin/env perl

sub sort {
    my @arr = @_;
    my $len = scalar @arr;

    for (my $i = 1; $i < $len-1; $i = $i + 1) {
        my $max = $i;
        for (my $j = $i + 1; $j < $len; $j = $j + 1) {
            if ($arr[$j] > $arr[$max]) {
                $max = $j
            }
        }
        $temp = $arr[$max];
        $arr[$max] = $arr[$i];
        $arr[$i] = $temp;
    }
}

print "Enter 10 numbers: ";
my $numbers = <STDIN>;
my @nums = split ' ', $numbers;

print "Unsorted: @nums\n";
sort \@nums;
print "Sorted: @nums\n";

return new net.htmlparser.jericho.Source(html).getRenderer().setMaxLineLength(Integer.MAX_VALUE).setNewLine(null).toString(); 确保行不被人为地包裹为80个字符。 maxLineLength使用与源相同的换行符。

答案 8 :(得分:0)

我使用HTMLUtil.textFromHTML(value) 来自

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

答案 9 :(得分:0)

使用 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;
}

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