现在的位置: 首页 > 综合 > 正文

关于StringIndexOutOfBoundsException那些事~

2018年08月02日 ⁄ 综合 ⁄ 共 1020字 ⁄ 字号 评论关闭

今天做截取字符串操作时遇到了这样的问题:

10-12 10:51:54.654: E/AndroidRuntime(31917): Caused by: java.lang.StringIndexOutOfBoundsException: length=16760; regionStart=8325; regionLength=8492

看到IndexOutOfBoundsException,第一反应就是什么这个越界那个越界的。在网上查了下,大部分人遇到这个问题的确是因为越界了。然而看我的错误信息

length=16760; regionStart=8325; regionLength=8492

是完全没有问题啊,和越界搭不上半毛线关系啊。真惆怅的时候看到了这篇文章:http://blog.chinaunix.net/uid-11361941-id-2880422.html

说到一个观点:

“不断的将被选中的字符串加到某一字符串末尾,当长度超过一定量时提示:
java.lang.StringIndexOutOfBoundsException: String index out of range: 10
”并不能说明String有长度限制
Java API指出StringIndexOutOfBoundsException异常
Thrown by String methods to indicate that an index is either negative or greater than the size of the string. For some methods such as the charAt method。
上面的错误是因为
String.length()<10;
而你又要取index>=10的字符从而抛出上面异常
String其实是没有限制的,而是当String太大了,超过JVM的自身的内存后会抛出
java.lang.OutOfMemoryError错误

就这样,灵光一闪,肯定是我截取的字符串太长了。很激动。改下截取方法。果然不报错了。唉。果然啊,像上文说的。

以上两个实验证明,String是没有长度限制的,而是有JVM的内存限制了String的长度。同时说明,并不会抛出任何Exception而只会抛出Error.

OutMemoryError表明程序的设计很差,或者遇到了超出编程人员所预想的大批量的数据。不管哪种情况,都只有下面这几种解决办法。它们是:

设计人员重新设计程序,不致使程序一次载入所有的数据。

抱歉!评论已关闭.