これは経験豊富な人にとっては簡単な質問です。私はJavaの初心者ですので、私はすでに数時間この問題を解決しようとしています。 私は実際の仕事をしてJavaを勉強していますが、私は配列とメモリ割り当てに関して何ができるのか読んだことがありますが、おそらく私はまだ何かを理解していません。ByteArrayInputStream read()メソッドは、IndexOutOfBoundsExceptionをスローします
私は基本的にソーステキストを取るこのメソッドを書いています。 "bla bla bla search entry bla bla bla"とし、 "bla bla bla {font = red}検索エントリ{/ font} bla bla bla"のような文字列を返すことで検索エントリを強調表示する必要があります。 ソーステキストが英語の場合、問題はありません。機能の前半(私はそれを含んでいません)はうまくいきます。 しかし、ソーステキストが2バイトコードであれば、同じことをするにはByteArrayInputStreamとByteArrayOutputStreamを使用する必要があります。この行場合
sDebug=new String(retVal, "UTF-8");
final String sHtml1="<font color='green'><b>";
final String sHtml2="</b></font>";
ByteArrayOutputStream baOut=new ByteArrayOutputStream();
//retVal contains source text
ByteArrayInputStream baIn=new ByteArrayInputStream(retVal););
try
{
//posB - where search entry begins in retVal
posB=Integer.valueOf(srchArray[j+2]);
//posE - where search entry ends in retVal
posE=posB+Integer.valueOf(srchArray[j+3]);
byte[] buffer=new byte[posB];
//read from beginning till posB
baIn.read(buffer, 0, posB);
sDebug=new String(buffer, "UTF-8");
baOut.write(buffer);
baOut.write(sHtml1.getBytes("UTF-8"));
sDebug=new String(baOut.toByteArray(), "UTF-8");
buffer=new byte[posE-posB];
//*************************************************
//*********THIS IS WHERE IT THROWS EXCEPTION:******
baIn.read(buffer, posB, posE-posB);
baOut.write(buffer);
sDebug=new String(baOut.toByteArray(), "UTF-8");
baOut.write(sHtml2.getBytes("UTF-8"));
sDebug=new String(baOut.toByteArray(), "UTF-8");
buffer=new byte[retVal.length-posE];
baIn.read(buffer, posE, retVal.length-posE);
baOut.write(buffer);
sDebug=new String(baOut.toByteArray(), "UTF-8");
retVal=baOut.toByteArray();
sDebug=new String(baOut.toByteArray(), "UTF-8");
//sDebug=baOut.toString("UTF-8");
}
catch(Exception e)
{
String err="Error: " + e.getMessage();
Toast.makeText(Central.context, err, Toast.LENGTH_LONG).show();
}
問題はこれらの行にあるようです。posB = Integer.valueOf(srchArray [j + 2]); posE = posB + Integer.valueOf(srchArray [j + 3]); 。存在しないsrchArray要素にアクセスしているようです。 –
例外はどの行で発生しますか? –
古い質問に再度アクセスし、いくつかの回答を受け入れることができるかどうかを確認してください。それは人々にもっと助けを提供するよう促します。 –