我知道我在这里可能是非常愚蠢的,但任何人都能解释我的问题吗?我正在尝试从包含html的字符串中提取标题...
public static void main(String args[]) {
System.out.println(getTitle("<title>this is it</title>"));
}
public static String getTitle(String a) {
StringTokenizer token = new StringTokenizer(a, "<title>", false);
return token.nextToken("</title>");
}
继续返回“h”,我无法理解为什么!我天真?
干杯
答案 0 :(得分:2)
我认为你的问题就在这里(引自the API doc,由我加粗的文字):
“分隔符组(分隔标记的字符)可以在创建时或基于每个标记指定。”
也就是说,分隔符不是字符串,而是一组字符。当您将"<title>"
作为第二个参数传递时,您告诉您的令牌系统分隔符是任何字符<
,t
,i
,{ {1}},t
,l
或e
。因此,标记生成器会尽职地跳过第一个标记中的所有字符,然后>
,并返回t
,因为它不在您提供的标记集中,而是下一个字符(h
)是。
所以e
不是你需要的。另请注意API文档中的这句话:
“StringTokenizer
是一个遗留类,出于兼容性原因而保留,但在新代码中不鼓励使用。建议所有寻求此功能的人使用StringTokenizer
split
方法或改为String
包。“
或者使用第三方库,正如其他人所指出的那样。
答案 1 :(得分:2)
我不确定StringTokenizer是否是在您的方案中使用的最佳类。也许你可以使用String.subString(int,int)来解决你的任务。正如BearsWillEat所示,如果您想进行更复杂的HTML解析,请使用一些第三方库。
public static void main(String args[]) {
System.out.println(getTitle("<title>this is it</title>"));
}
public static String getTitle(String a) {
return a.substring(a.indexOf("<title>") + "<title>".length(), a.indexOf("</title>"))
}
答案 2 :(得分:0)
您指定的分隔符是“”,这是空字符串。在你的字符串开头的“t”和“h”之间有一个空字符串,因此nextToken返回“t”。 这是正常的,并按指定的方式工作。见http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html
答案 3 :(得分:0)
你不能这样使用StringTokenizer。请参阅javadoc http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html
delims
参数包含在字符串中被视为分隔符的字符集。因此,在这里,你有“&lt;”,“t”,“i”,...作为分隔符。
对于那种工作,你真的应该考虑使用html或xml专用库。 你也可以使用“&lt;&gt;”作为分隔符,并根据您的需求实现极简主义的HTML解析器,但是一旦您的最小需求延伸,这可能会导致错误,头痛和更多错误。
答案 4 :(得分:0)
如果要解析HTML,最好的方法可能是HTML Cleaner, according to this SO post。
我建议使用此特定于域的库,因为它还可以让您在需要时轻松扩展应用程序的功能。或者如果它还在解析HTML,请帮助您使用另一个应用程序。