【发布时间】:2012-02-10 07:36:34
【问题描述】:
对于这里有经验的人来说,这应该是一个简单的问题。我是 Java 初学者,所以我已经尝试解决这个问题几个小时了。 我正在通过实际工作学习Java,我已经阅读了有关数组和内存分配的内容,但可能我仍然不明白。
我正在编写这种方法,它基本上采用源文本,例如“bla bla bla search entry bla bla bla”,并应通过返回类似“bla bla bla {font=red}search entry{/font} bla bla bla”的字符串来突出显示搜索条目。 如果源文本是英文的,没有问题,函数的前半部分(我没有包含它)运行良好。 但是如果源文本是双字节编码的,我必须使用 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 元素。
-
异常发生在哪一行?
-
请重新访问您以前的问题并检查您是否可以接受一些答案。这将鼓励人们提供更多帮助。
-
我重新审视了我的旧问题。感谢那。我没有注意到每个答案旁边的灰色大勾号,现在我应该没事了。
-
2 迈克。这些行很好,在此之后的下一行发生异常 //*********这是抛出异常的地方:******
标签: java android bytearrayinputstream