2010-02-17 58 views
0

我知道我可能在這裏非常愚蠢,但任何人都可以解釋我的問題嗎?我試圖從包含html的字符串中提取標題...Java StringTokenizer的麻煩 - 新手

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」,我不知道爲什麼!我很天真嗎?

乾杯

+3

如果您嘗試進行的操作不僅限於HTML解析,還可以使用第三方庫來完成。 –

+0

基本上所有我需要待辦事項是提取標題,並鏈接目前在網頁上..你能建議任何簡單的圖書館,讓我這樣做嗎?謝謝 – Andy

回答

2

我認爲你的問題就出在這裏(引自the API doc,文字由我加粗):

「的組分隔符的既可以在創建指定(即單獨標記的字符)時間或每個代幣的基礎上。「

也就是說,分隔符不是一個字符串,而是一組字符。當你通過"<title>"作爲第二個參數,你告訴你的標記生成器的分隔符是任何字符<title>的。因此,令牌生成器會盡快跳過第一個標籤中的所有字符,然後返回t,並返回h,因爲它不在您給它的令牌集合中,但下一個字符(e)是。

所以StringTokenizer是不是你在這裏所需要的。還要注意這句話從API文檔:

StringTokenizer是保留兼容性的原因,雖然它的使用是在新代碼氣餒遺留類建議任何尋求此功能使用的String或在split方法。代替java.util.regex包。「

或者使用第三方庫,正如他人已經注意到的那樣。

2

我不確定StringTokenizer是否是您的方案中使用的最佳類。也許你可以通過使用String.subString(int,int)來解決你的任務。正如BearsWillEatYou指出的,如果你想做更復雜的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>")) 
} 
0

您不能這樣使用StringTokenizer。請參閱javadoc http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html

delims參數包含在字符串中被視爲分隔符的一組字符。因此,在這裏,您有「<」,「t」,「i」,...作爲分隔符。

對於那種工作,你真的應該考慮使用html或xml專用庫。 您也可以使用「<>」作爲分隔符,並實現最小化的html解析器,以滿足您的需求,但這可能會導致錯誤,頭痛和更多的錯誤,一旦您的最小需求擴展。

0

如果您解析HTML,最好的方法可能是HTML Cleaner, according to this SO post

我會推薦使用這個域特定的庫,因爲它也會給你一個簡單的方法來在需要時擴展你的應用程序的功能。或者,如果這也解析HTML,可以幫助您使用其他應用程序。