0

如何在字符串中找到多个子字符串?让我们将其与基因测序进行比较。你有一个字符串:TTCGAGATGCTGATTGACATGTTAGTAG。我已经弄清楚如何仅使用 TGA 找到我的序列的开头(ATG 是起点)和序列的结尾。我不知道如何为 TAA 和 TGA 重复该过程。是否可以让我的代码行中的所有 3 个子字符串都在寻找我的终点?

String genome = input.nextLine();
    //first check: see if the genome contains the marker "ATG"  
    if (genome.contains("atg")){
    //if the genome contains "ATG" marker, begin second test: see if the   genome contains the marker "TAG"
    if (genome.contains("tag"))

我正在使用嵌套的 if 语句,并尝试在上面的代码行中添加一些东西,但一无所获!我知道我可以复制/粘贴和更改参数,但如果该行中有多个序列,我无法弄清楚那个。我想从上面的字符串中得到的是: TTCGAG*ATG* C *TGA*TTGAC*ATG* T *TAG*TAG 我可以打印C,但不能打印到T。一旦找到第一个子字符串“ C ” ,我的程序就会停止运行

4

2 回答 2

0

您可以使用正则表达式,对于序列 ATG...TGA,您可以尝试,

String input = "TTCGAGATGCTGATTGACATGTTAGTAG";
Pattern pattern  = Pattern.compile("ATG(.*?)TGA");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
    System.out.println(matcher.group(1));
}

你会得到'C'。

如果您想在发布的问题中获得“T”,您可以将正则表达式更改为 ATG(.*?)TAG,因为前缀和后缀明显不同。

于 2013-01-13T09:09:01.273 回答
0

我不确定我是否理解了这个问题,但也许这与您正在寻找的内容很接近。

String getSubstringBetween(String start, String[] ends) {
    int indexOfStart = genome.indexOf(start);
    if(indexOfStart >= 0) {
       int indexOfEnd = -1;
       int i = 0;
       while(i < ends.length() && indexOfEnd < 0) {
          indexOfEnd = genome.indexOf(ends[i++], indexOfStart);
       }
       if(indexOfEnd >= 0) {
          String end = ends[i - 1];
          return genome.substring(indexOfStart, indexOfEnd + end.length());
       } else {
          return genome.substring(indexOfStart);
       }
    }
    return "";
}
于 2013-01-13T08:47:36.500 回答