我有一個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;}
我在做什麼錯在這裏。誰能幫忙?
作爲一個側面說明,您可以從庫中受益,如jsoup做你的HTML解析爲您 – Sean 2013-03-12 14:53:19
我收回這句話......見下文。 – iamnotmaynard 2013-03-12 14:59:14
這個詞是脫口而出,不是胡蘿蔔......或胡蘿蔔......或任何其他種類的蔬菜。而且'''不管怎麼說都不是。這是一個「大於符號」或(如果你想)「右尖括號」 – 2013-03-12 15:00:30