我正试图找到一种方法来妥善分割,但直到现在我遇到了很多问题。
使用string.split / string.substring, string.indexof, string.replace
等等。
这是一个需要拆分成列表的示例字符串。
We are <b><i>very</i></b><b>a</b>mused!\nThank you.
,列表中的结果应按以下顺序排列:
0: We
1: are
2: <b>
3: <i>
4: very
5: </i>
6: </b>
7: <b>
8: a
9: </b>
10: mused!
11: \n
12: Thank
13: you.
所以我想做的是:
splitStart = baseString.Value.Split(' ');
foreach (string part in splitStart)
{
if (part.Contains("<"))
{
// get the parts <b> <i> <size> <color> </b> </i> </size> </color> \n
textlist.Add(part); // add each part to list
}
else
{
textlist.Add(part);
Debug.Log(part);
}
}
我尝试过像
这样的事情contains("<n>")
replace "<n>" "" and add "<n>" to array
但这可能会破坏序列。
编辑: 我忘了说这是针对c#
的答案 0 :(得分:0)
我认为您需要使用某些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.
您可以在site找到我目前使用的NSoup库(实际上,不是正式版0.8.0)。
官方NSoup网站是here,但没有访问者界面。
然后,您可以使用自己的方法来完成代码。
我必须告诉你这只是你的目标选择。
方面,