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>とタグが含まれていることを確認する必要があります。</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);

JavaDocsString.indexOfから、文字列が発生しない場合-1は が返されることがわかっています。

于 2013-08-26T18:19:45.917 に答える
3

を使った方が使いやすいと思います

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

javadoc

アパッチコモンズ

例:

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 に答える