我是从一个jsp页面中取得所有引用的图片的路径,但是取得是类似与这样<IMG  src="../../images/iframe/1.gif" width="9" height="19" id=play_prev/>的字符窜 有好多条 我就使用循环一句一句的从整句中截取类似这样../../images/iframe/1.gif的句子,具体是
if (list.get(i).contains(".gif"))
            {
                String temp = list.get(i).substring(list.get(i).indexOf("src=") + 5, list.get(i).indexOf(".gif") + 4).trim();
                filterlist.add(temp);
            }
但是如果太多的话 就会报
java.lang.StringIndexOutOfBoundsException: String index out of range: -63
at java.lang.String.substring(Unknown Source)这样的错误
问各位大侠,这个有替换的方法吗 或者怎么来解决???

解决方案 »

  1.   

    从你的情况来看,这跟多少没有关系,阴为你每次都是声明一个新的字符串来存放substring,而不是累加,应该是你的substring取到后面某次的时候参数出了问题,不知道你list里的元素是否都是src在gif前面?或者某条记录里list.get(i).indexOf("src=") + 5或者list.get(i).indexOf(".gif") + 4超过了该条记录字符串的长度导致数组越界
      

  2.   

    先谢了!
    就是要每次都声明一个新的字符串,不能累加的 因为我要的一条一条的,要不我还得二次截取,还有list里面的src都在.gif之前的,但是我还有个方法和这个类似,是取后缀为.jpg的,那个是没问题的,因为我用的gif图片比较多,我感觉就是取得数据太多了的原因,但不知道具体怎么回事
      

  3.   

    我的意思是你没有累加是对的,但是你说取数据太多了就不对了,因为没有累加,所以跟数据多少没有关系,你取一条数据和取多条数据都是一样的,除非你一条数据的长度就超过了string的界限,这也不大可能,所以问题应该还是在substring那的参数,你再看看
      

  4.   

    对了 还有没有其他方法可以替代这个substring方法呢?
      

  5.   

    最好是用JavaScript
       var imgs= document.getElementsByTagName("IMG");
       var  srcarr=new Array(); 
      for(var i=0;i<imgs.length;i++){
       srcarr[i]=imgs[i].src;
       }