0

サブストリングと bufferedreader を使用して 2 つのタグ間のテキストを抽出しようとしていますが、indexoutofbounds 例外が発生します。5 つの Web ページを解析しており、各 Web ページからテキストを読み込もうとしているため、if ステートメントが使用されます。以下は私のコードです。

    public static List<WebPage> readRawTextFile(Context ctx, int resId) {
    InputStream inputStream = ctx.getResources().openRawResource(
            R.raw.pages);

    InputStreamReader inputreader = new InputStreamReader(inputStream);
    BufferedReader buffreader = new BufferedReader(inputreader);
    String line;
    StringBuilder text = new StringBuilder();
    String txt1 = text.toString();
    try {
        int count = 0;
        while ((line = buffreader.readLine()) != null) {

            if (line.length() == 0) {
                int sURL = line.indexOf("<!--");
                int eURL = line.indexOf("-->");
                String newSub = txt1.substring(txt1.indexOf(sURL) + 1,
                        txt1.indexOf("\""));
                System.out.println(newSub);
            }
4

2 に答える 2

3

このコードを見てください:

if (line.length() == 0) {
    int sURL = line.indexOf("<!--");
    int eURL = line.indexOf("-->");
    String newSub = txt1.substring(txt1.indexOf(sURL) + 1,
            txt1.indexOf("\""));
    ...
}

行が空の場合、ブロックに入ります。したがってsURLeURL間違いなく -1 になります。

次に、 を使用していますがtxt1.indexOf(-1)、これは最初は奇妙です (なぜindexOfインデックスを使用して渡すのでしょうか?) - ここでの値は両方とも -1 になると強く思われindexOfます。したがって、次のようになります。

String newSub = txt1.substring(0, -1);

...失敗します。なぜtxt1.substring代わりにline.substringhere を使用しているのか、まったく明らかではありません。

基本的に、あなたのコードにはたくさんの問題があると思います。すべてを非常に注意深く、すべての行を見て、本当に意味がわかるまで変更する必要があります。次に、単体テストを追加します...

于 2013-01-03T22:58:23.027 に答える
0

以来sURL、すでに

int sURL = txt1.indexOf("<!--");

、その後txt1.indexOf(sURL)ではあまり意味がありません

String newSub = txt1.substring(txt1.indexOf(sURL) + 1, txt1.indexOf("\""));

行、おそらくあなたは次のようなことを意味しました:

String newSub = txt1.substring(sURL + 1, txt1.indexOf("\""));

txt1.indexOf("\"")それは、後で使用する理由の謎を残すだけです。

于 2013-01-03T22:59:04.090 に答える