我有一段内容同时包含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)
答案 0 :(得分:4)
您substring
的来电可能会传递给responseStr
的无效索引。在调用substring之前,您需要验证字符串是否实际包含<rss>
和</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
。
答案 1 :(得分: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;
}
答案 2 :(得分: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-----