使用substring()查找模式的问题

时间:2014-01-31 03:45:08

标签: java

以下是我正在尝试实施的内容:

“如果链是:

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的索引?如果您发现问题令人困惑,请告诉我,我会尝试更好地解释它。

4 个答案:

答案 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”变量,但是你没有显示它是如何初始化的......你有没有错过我们需要知道的相关内容来帮助你解决问题?