关于StringIndexOutOfBoundsException那些事~

来源:互联网 发布:软件应用商业计划书 编辑:程序博客网 时间:2024/06/06 03:54
今天做截取字符串操作时遇到了这样的问题:
[java] view plain copy
  1. 10-12 10:51:54.654: E/AndroidRuntime(31917): Caused by: java.lang.StringIndexOutOfBoundsException: length=16760; regionStart=8325; regionLength=8492  

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

[java] view plain copy
  1. length=16760; regionStart=8325; regionLength=8492  

是完全没有问题啊,和越界搭不上半毛线关系啊。


说到一个观点:

[html] view plain copy
  1. “不断的将被选中的字符串加到某一字符串末尾,当长度超过一定量时提示:  
  2. java.lang.StringIndexOutOfBoundsException: String index out of range: 10  
  3. ”并不能说明String有长度限制  
  4. Java API指出StringIndexOutOfBoundsException异常  
  5. 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。  
  6. 上面的错误是因为  
  7. String.length()<10;  
  8. 而你又要取index>=10的字符从而抛出上面异常  
  9. String其实是没有限制的,而是当String太大了,超过JVM的自身的内存后会抛出  
  10. java.lang.OutOfMemoryError错误  

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


[html] view plain copy
  1. 以上两个实验证明,String是没有长度限制的,而是有JVM的内存限制了String的长度。同时说明,并不会抛出任何Exception而只会抛出Error.  
  2.   
  3. OutMemoryError表明程序的设计很差,或者遇到了超出编程人员所预想的大批量的数据。不管哪种情况,都只有下面这几种解决办法。它们是:  
  4.   
  5. 设计人员重新设计程序,不致使程序一次载入所有的数据。  

原创粉丝点击