0

HTML を解析するとき、「>」があるたびにchar、その後に数字があるかどうかを確認する必要があります。番号は 1 桁、2 桁、3 桁のいずれかです。

コードは問題ないようですが、常にStringIndexOutOfBoundException.

コード:

while (matches < 19) 
    {
        more  = dataInHtml.indexOf(">",index);
        nextOne = dataInHtml.charAt(more + 1);
        nextTwo = dataInHtml.charAt(more + 2);
        nextThree = dataInHtml.charAt(more + 3);

        if (Character.isDigit(nextOne))  digitOne = true;
        if (Character.isDigit(nextTwo))  digitTwo = true;       
        if (Character.isDigit(nextThree))  digitThree = true;

        if (digitThree)
        {
            data[matches] = dataInHtml.substring(more + 1, 3);
            matches++;
            digitThree = false;
            digitTwo = false;
            digitOne = false;
            index = more + 3;
            itWasADigit = true;
        }

        if (digitTwo)
        {
            data[matches] = dataInHtml.substring(more + 1, 2);
            matches++;
            digitTwo = false;
            digitOne = false;
            index = more + 2;
            itWasADigit = true;
        }           

        if (digitOne)
        {
            data[matches] = dataInHtml.substring(more + 1, 1);
            matches++;
            digitOne = false;
            index = more + 1;
            itWasADigit = true;
        }           

        if (!(itWasADigit))    
        {
            index = more + 1;
            itWasADigit = false;
        }
    }
4

1 に答える 1

2

文字列 "string >12" をこの外観に渡すと、次のようになります。

more  = dataInHtml.indexOf(">",index);
  nextOne = dataInHtml.charAt(more + 1); <-- get the 1
  nextTwo = dataInHtml.charAt(more + 2); <-- Get the 2
  nextThree = dataInHtml.charAt(more + 3); <-- Try to access outside of the string as more+3 is greater than the highest index in the string, so it crashes out

したがって、 が表示されますStringIndexOutOfBoundsException

このようなものを使用してください

if(dataInHtml.length() > more+3) 

その文字にアクセスしようとする前に、文字列の長さが十分に大きいことを確認します。

HTML ドキュメントから数値を読み取ろうとしている場合、これはおそらく理想的な方法ではありません。可能であれば、パーサーで解析することを検討する必要があります。

http://jsoup.org/は有望に見えます。

于 2013-02-08T15:46:54.513 に答える