以下是我正在尝试实施的内容:
“如果链是:
AACATGTACTACTGGTG
并且像这样调用snip方法:
剪辑(“CA”,“A”)
然后生成的新DNAStrandJedi对象应代表 在“索引2”的“CA”的第一次匹配之后找到的链“TGT” 在指数7的“A”的后续比赛之前。“
这是我的代码:
public DNAStrandJedi snip(String startPattern, String endPattern) {
if (!passedStrand.contains(startPattern)
|| !passedStrand.contains(endPattern)) {
return null;
} else {
String snippedString = passedStrand.substring(3, 5);
return new DNAStrandJedi(snippedString);
}
}
我试图剪断的链是:“AGTCAGTACC” 这里我将snip()方法的结果打印到控制台:
System.out.println("Snip: " + test.snip("GT", "TA").getStrandString());
我应该获得“CAG”链,但我只是获得CA.
我遇到的问题是找出要用作索引来获取snippedString的数字。我是否必须在这里使用某种for循环来获取startPattern和endPattern的索引?如果您发现问题令人困惑,请告诉我,我会尝试更好地解释它。
答案 0 :(得分:0)
使用indexOf查找索引...
} else {
int start = passedStrand.indexOf(startPattern) + startPattern.length();
int end = passedStrand.indexOf(endPattern, start);
String snippedString = passedStrand.substring(start,end);
return new DNAStrandJedi(snippedString);
}
答案 1 :(得分:0)
String.indexOf()函数是您所需要的。
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String,int)
if (passedStrand.indexOf(startPattern) > -1 && passedString.indexOf(endPattern, passedStrand.indexOf(startPattern)) > -1)
return return new DNAStrandJedi(passedStrand.indexOf(startPattern)+startPattern.length, passedString.indexOf(endPattern, passedStrand.indexOf(startPattern))-1);
else
return null;
(未经测试且不是最佳,但其类似的东西)
答案 2 :(得分:0)
以下代码以简单明了的方式编写,可能会解释
public DNAStrandJedi snip(String startPattern, String endPattern) {
int sL = startPattern.length();
int startIndex = passedStrand.indexOf(startPattern);
int endIndex = passedStrand.indexOf(endPattern, startIndex + sL);
if ( startIndex == -1 || endIndex == -1 )
return null;
}
String snippedString = passedStrand.substring(startIndex+sL, endIndex);
return new DNAStrandJedi(snippedString);
}
有关 Java字符串函数的信息,请参阅here
答案 3 :(得分:0)
实际上@vanza似乎已经回答了你的问题,它是硬编码的“substring(3,5)”,导致了这个问题。
你引用了一个“passStrand”变量,但是你没有显示它是如何初始化的......你有没有错过我们需要知道的相关内容来帮助你解决问题?