3

我有一段同时包含 html 和 rss 的内容,我想将它们分开并存储在单独的字符串中。所以,我试图根据它们的开始和结束标签来解析它们,并在 rss /rss 之间抓取内容。

代码适用于 html 和 /html。但是我看到 rss 和 /rss 的错误。

下面是我的代码片段。

// parse the responseStr to html
html = responseStr.substring(responseStr.indexOf("<html>"),
responseStr.lastIndexOf("</html>") + 7);
System.out.println("html string"+html );

有人可以指导我下面的代码有什么问题吗?

// parse the responseStr to rss
rss = responseStr.substring(responseStr.indexOf("<rss version="2.0">"),
responseStr.lastIndexOf("</rss>") + 6);
System.out.println("rss string = "+rss );

我得到以下异常:

  java.lang.StringIndexOutOfBoundsException
    at java.lang.String.substring(String.java:1093)
4

3 回答 3

4

您的调用很可能substring被传递给您的responseStr. 在调用 substring 之前,您需要验证您的字符串是否实际包含<rss>and</rss>标记。

尝试这个:

String result;
int start = responseStr.indexOf("<rss>");
int end = responseStr.lastIndexOf("</rss>");

if (start != -1 && end != -1)
{
  result = "rss string = " + responseStr.substring(start, end + 6);
}
else
{
  result = "rss string not found";
}

System.out.println(result);

JavaDocs for 中String.indexOf,我们知道如果字符串不出现,-1将被返回。

于 2013-08-26T18:19:45.917 回答
3

我认为使用会更容易

StringUtils.substringsBetween(String str,String open,String close)

文档

阿帕奇公地

例子:

String[] rss= StringUtils.substringsBetween(testHtml, "<rss>", "</rss>");
    for (String s : rss) {
        System.out.println("td rss:" + rss); 
}

public static String substringBetween(String str, String open, String close) {
    if (str == null || open == null || close == null) {
        return null;
    }
    int start = str.indexOf(open);
    if (start != INDEX_NOT_FOUND) {
        int end = str.indexOf(close, start + open.length());
        if (end != INDEX_NOT_FOUND) {
            return str.substring(start + open.length(), end);
        }
    }
    return null;
}
于 2013-08-26T18:20:00.050 回答
2

我会推荐xml解析器而不是下面的代码

public static void main(String[] args) {
    String responseStr = "<rss ...>------content-----</rss>";
    int start = responseStr.indexOf("<rss");
    String content = null;
    if (start != -1) {
        start = responseStr.indexOf(">", start);
        if (start != -1) {
            int end = responseStr.lastIndexOf("</rss>");
            if (end != -1) {
                content = responseStr.substring(start + 1, end);
            }
        }
    }
    if (content != null)
        System.out.println(content);
    else
        System.err.println("Content not found");

}

输出

------content-----
于 2013-08-26T19:51:52.637 回答