字符串索引超出范围-8

时间:2016-03-29 06:54:23

标签: java

我绝对不知道索引超出范围的原因。 起点来自字符串atg中的字母ataaactatgttttaaatgt,并以taa结尾。我在这里缺少什么?

编辑:这就是这里的一行

String subStr1 = dna.substring(start,stop1);

/**

 *
 * @author Duke Software Team 
 */
import edu.duke.*;
import java.io.*;

public class TagFinder2 {


  public String findProtein(String dna) {
    int start = dna.indexOf("atg");

    int stop1 = dna.indexOf("tag", start+3);
    int stop2 = dna.indexOf("tga",start+3);
    int stop3 = dna.indexOf("taa",start+3);


    String subStr1 = dna.substring(start,stop1);
    String subStr2 = dna.substring(start,stop2);
    String subStr3 = dna.substring(start,stop3);

    String result;

    if( subStr1.length() % 3 ==0 ){
      return subStr1;
    } else if (subStr2.length()%3==0){
      return subStr2;
    } else if (subStr3.length()%3 == 0) {
      return subStr3;
    } else {

      return "";
    }
  }

  private void stopCodon(String gene){
    //This prints out the last 3 characters of the gene

    String stopCodon = gene.substring(gene.length() - 3);
    System.out.println(stopCodon);
  }

  public void testing() {
    String a = "ataaactatgttttaaatgt";
    String b = "acatgataacctaag";
    String c = "AATGCTAGTTTAAATCTGA";

    String result = findProtein(a);

    stopCodon(result);

  }
  //public String stopCodon(String dna){
  //   return 
  //  }


}

2 个答案:

答案 0 :(得分:2)

int stop1 = dna.indexOf("tag", start+3); 

String a不包含文本tag,因此返回-1。因此,您最终会调用

String subStr1 = dna.substring(start,stop1);

使用参数7和-1导致AIOOB。

来自文档:

  

抛出:IndexOutOfBoundsException - 如果beginIndex为负数,或者   endIndex大于此String对象的长度,或   beginIndex大于endIndex。

答案 1 :(得分:0)

如果您分析或调试代码,您会发现stop1=-1,start=7。当substring(7,-1)时,怎么会出错呢?

Click here to show the debug message picture.