在HtmlParser包中一个解析html中文本的最基本的方法是:
Parser parser=new Parser(url);
NodeFilter filter=new HasAttributeFilter("id","s");
NodeList nodelist=parser.extractAllNodesThatMatch(filter);
for(Node node:nodelist.toNodeArray())
{
System.out.print(node.toPlainTextString().trim());
}
它的作用是将<span id="s">风云Ⅱ</span>中标签间的字符串提取出来.
可以注意到,上面的标签间的字符串都是Unicode码.要实现(http://htmlparser.com.cn/post/2009092320..html)里贴图的效果,还得进行Unicode向字符串的转化.
从百度百科了解到,Unicode为每种语言中的每个字符设定了统一并且唯一的二进制编码.
对于"&#加数字加分号"这种形式的字符,其中的十进制数字其实就是对应字符的唯一的十进制编码.
于是搜索到了以下转化程序:
public class CodeFormTest {
public static void main(String args[]) {
String a = "十月围城2012刺陵";
String str = a.replaceAll(";&#", ",").replace("&#", ",").replaceAll(";", ",").replace(" ", "");
System.out.println(str);
String[] s2 = str.split(",");
String s1 = "";
// System.out.println(s2.length);
for (int i = 1; i < s2.length; i++) {
int v = Integer.parseInt(s2[i], 10);
if (v < 19968 || v > 40895) {
s1 = s1 + v;
} else {
s1 = s1 + (char) v;
}
}
System.out.println(s1);
}
}
首先,它将原字符串中的";&#"全部替换成逗号,再将字符串开始,末尾和由单纯数字分割开的&#和分号替换成逗号,再用spilt方法获得逗号间的数字.最后用(char)强制转换后即可输出.
值得注意的是,在Unicode 编码范围中,中文字符的范围是十六进制的4E00-9FBF,也就是十进制的19968-40895,所以很容易把2012这部"数字"电影正确解析出来.程序最后输出的结果是:
,21313,26376,22260,22478,2012,21050,38517,
十月围城2012刺陵
还有个小问题就是,可能存在恰好有19968-40895之间的数字必须当成十进制数字来解析的情况.