关于StringIndexOutOfBoundsException那些事~

今天做截取字符串操作时遇到了这样的问题:
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表明程序的设计很差,或者遇到了超出编程人员所预想的大批量的数据。不管哪种情况,都只有下面这几种解决办法。它们是:

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值