这里是一个非常简单的代码块使用JRE 1.6运行时环境,并运行在64位服务器Server 2008 R2:….
cntr = 0; while (cntr < localheaders.size()) { String tempText = textstring.toUpperCase(); int pos = 0; int lastindx = 0; int lendPos; int tendPos = 0; while ((pos > -1) && (tempText.length() > 0)) { int headerLengthbeforeUpper = localheaders.get(cntr).header.length(); String aHeader = localheaders.get(cntr).header.toUpperCase(); int headerLengthafterUpper = aHeader.length(); pos = tempText.indexOf(aHeader); // 10_21_2010 if (pos > 0) { // ef 07-10-2011 char c; try { c = tempText.charAt(pos - 1); if (Character.isLetterOrDigit(c)) pos = -1; } catch (Exception e) { System.out.println("Value of pos->" + pos); System.out.println("Length of the string->" + tempText.length()); System.out.println("header length before->"+headerLengthbeforeUpper); System.out.println("header length after->"+headerLengthafterUpper); e.printStackTrace(); } } ........
我发现的是pos = tempText.toUpperCase().indexOf(aHeader);
(大约10行)被间歇性地设置为大于string长度的stringtempText
中的值。 这会导致java.lang.StringIndexOutOfBoundsException
。 索引始终在string实际长度的100以内。 例如,在我今天晚上跑的一个testing中,posvariable被设置为24432,长度为24404。在大写之前和之后的头部长度是相同的,以解决下面的一个注释。 注意,如果我连续两次在同一个文件上重新运行代码,第二次错误不会发生。
一些额外的信息:
Java版本“1.6.0_20”Jav(TM)SE运行环境(版本1.6.0_20-b02)Java HotSpot(TM)64位服务器VM(版本16.3-b01,混合模式)
testing环境在VMware Workstation中运行。
我相信这是一个环境问题,给出了错误的奇怪和它只在我的64位testing环境中显示的事实。 我试图找出问题的根源。 有没有人,过去有过这样的错误? 有没有人知道有关这个特定的Java构build可能会导致这种错误的错误?
任何想法如何解决这个问题?
谢谢,
埃利奥特
看起来像这个错误可能与您的问题有关: