2013-03-12 102 views
1

我有一個Java應用程序需要從HTML頁面解析HTML元素。我簡單的HTML測試設置爲這樣:Java IndexOf找不到正確的數據

<!DOCTYPE html> 
<html> 
<head> 
<style type='text/css'> 
    div {width:100%;height:100px;background-color:blue;} 
</style> 
</head> 
<body> 
    <div></div> 
</body> 
</html> 

我的代碼將是這樣設置,它會在文檔中搜索字符串: 「<風格」

,然後搜索收盤carot:「 >「因爲用戶可能輸入的任何這些組合爲他們的HTML文件:

<style type="text/css"> 

or 

<style type = "text/css" > 

or 

<style type = 'text/css' > 

or 

<style type='text/css'> 

etc.. 

所以我的方法是找到‘風格’的標籤,一切都高達閉幕carot

然後查找結束樣式標記:

</style> 

然後抓住這兩個實體之間的一切。

這裏是我的文件及其代碼:

************strings.xml************ 

String txt_style_opentag = "<style" 
String txt_end_carrot = ">" 
String txt_style_closetag = "</style>" 

*********************************** 





************Parser.java************ 
public static String getStyle(Context context, String text) { 
    String style = ""; 

    String openTag = context.getString(R.string.txt_style_opentag); 
    String closeTag = context.getString(R.string.txt_style_closetag); 
    String endCarrot = context.getString(R.string.txt_end_carrot); 

    int openPos1 = text.indexOf(openTag); 
    int openPos = text.indexOf(endCarrot, openPos1); 
    int closePos = text.indexOf(closeTag, openPos1); 

    if (openPos != -1 && closePos != -1) 
     style = text.substring(openPos + openTag.length(), closePos).trim(); 

    if (style != null && style.length() > 0 && style.charAt(0) == '\n')  // first \n remove 
     style = style.substring(1, style.length()); 

    if (style != null && style.length() > 0 && style.charAt(style.length() - 1) == '\n') // last \n remove 
     style = style.substring(0, style.length() - 1); 

    return style; 
} 
******************************************************** 

我的結果非常接近,但不正確的。結果是這樣的:

{width:100%;height:100px;background-color:blue;} 

如果您發現,它缺少「div」部分。它應該看起來像這樣:

div {width:100%;height:100px;background-color:blue;} 

我在做什麼錯在這裏。誰能幫忙?

+4

作爲一個側面說明,您可以從庫中受益,如jsoup做你的HTML解析爲您 – Sean 2013-03-12 14:53:19

+0

我收回這句話......見下文。 – iamnotmaynard 2013-03-12 14:59:14

+1

這個詞是脫口而出,不是胡蘿蔔......或胡蘿蔔......或任何其他種類的蔬菜。而且'''不管怎麼說都不是。這是一個「大於符號」或(如果你想)「右尖括號」 – 2013-03-12 15:00:30

回答

1

您從開始標記(右括號>)結束並添加開始標記(而不是endCarrot)的長度的子字符串,從而將子字符串的起始位置前移你想要的地方。你想幹什麼

style = text.substring(openPos + endCarrot.length(), closePos).trim(); 
+0

我仍然會把它給你;) – bagofmilk 2013-03-12 15:08:51

+0

謝謝。我在打我的時候發佈了你的答案。 – iamnotmaynard 2013-03-12 15:11:10

0

當然......在我尋求幫助後,我終於明白了。下面的代碼應改爲

FROM:

style = text.substring(openPos + openTag.length(), closePos).trim(); 

TO:

style = text.substring(openPos + endCarrot.length(), closePos).trim(); 

對不起這個職位。並感謝您的建議