我想你需要的字符一些預處理使用一些HTML解析器像jsoup或樹結構算法。
這是用Jsoup庫創建這種情況的一個選項。
1. Java版本
首先,準備從HTML標籤的單詞列表。
final List<String> wordList = new ArrayList<String>();
然後,使用Jsoup的NodeVisitor類遍歷html內容。
doc.body().traverse(
new NodeVisitor(){
@Override
public void head(Node arg0, int arg1) {
if(arg1 == 1)
{
String value = arg0.outerHtml();
if(!wordList.contains(value))
wordList.add(arg0.outerHtml());
}
}
@Override
public void tail(Node arg0, int arg1) {
}
}
);
最後,代碼如下。
import java.util.ArrayList;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
import org.jsoup.select.NodeVisitor;
public class HtmlTest {
public static String parseHtml(String str) {
org.jsoup.nodes.Document doc = Jsoup.parse(str);
final List<String> wordList = new ArrayList<String>();
doc.body().traverse(
new NodeVisitor(){
@Override
public void head(Node arg0, int arg1) {
if(arg1 == 1)
{
//String value = Jsoup.parse(arg0.outerHtml()).text();
String value = arg0.outerHtml();
if(!wordList.contains(value))
wordList.add(arg0.outerHtml());
}
}
@Override
public void tail(Node arg0, int arg1) {
}
}
);
for(String word: wordList)
{
System.out.println(word);
}
return "";
}
public static void main(String[] args)
{
System.out.println(parseHtml("We are <b><i>very</i></b><b>a</b>mused!\nThank you."));
}
}
輸出必須看起來像,
We are
<b><i>very</i></b>
<b>a</b>
mused! Thank you.
2. C#版本
嗯,C#版本的源代碼是豆蔻位不同 但相同的過程(需要稍作更改)。
這是我的NodeVisitor版本的代碼。
首先解析html內容。
Document doc = NSoupClient.Parse(str);
二,從'body'標籤中選擇原文。
doc.Select("body").Traverse(new TestNodeVisitor(wordList));
完整的代碼如下。
using NSoup;
using NSoup.Nodes;
using NSoup.Select;
using System;
using System.Collections.Generic;
using System.IO;
namespace NSoupTest
{
class Program
{
private class TestNodeVisitor : NodeVisitor
{
List<String> wordList;
public TestNodeVisitor(List<String> wordList)
{
this.wordList = wordList;
}
public void Head(Node node, int depth)
{
if(depth == 1)
{
String value = node.OuterHtml();
if(!wordList.Contains(value))
wordList.Add(value);
}
}
public void Tail(Node node, int depth)
{
}
}
public static String parseHtml(String str) {
Document doc = NSoupClient.Parse(str);
List<String> wordList
= new List<String>();
doc.Select("body").Traverse(new TestNodeVisitor(wordList));
foreach (String word in wordList)
{
Console.WriteLine(word);
}
return "";
}
static void Main(string[] args)
{
try
{
parseHtml("We are <b><i>very</i></b><b>a</b>mused!\nThank you.");
}
catch (FileNotFoundException fe) {
Console.WriteLine(fe.Message);
}
}
}
}
輸出也應該是
We are
<b><i>very</i></b>
<b>a</b>
mused! Thank you.
你可以找到我在這個時候(其實,不是一個正式版本0.8.0)從site使用的NSoup庫。
官方NSoup網站是here但沒有訪客界面。
然後,您可以使用自己的方法來完成代碼。
我必須告訴你,這只是你的目標的一個選擇。
Regard,
似乎是定義解析器的相當方便的情況。首先要明確這些規則。如果你根據一個空格'「」分割它,這些標籤看起來似乎全部融入到了一個鏈中。然後'<'需要找到一個匹配的'>'把子字符串拉出到最終列表中。然後'!'和'\ nT'需要再次進行特殊處理。 – nullpointer