2013-01-13 105 views
0

如何在字符串中查找多个子字符串?我们来比较它与基因测序。你有一个字符串:TTCGAGATGCTGATTGACATGTTAGTAG。我已经想出了如何找到我的序列的开始(ATG是起点)以及仅使用TGA的序列的结尾。我无法弄清楚如何重复TAA和TGA的过程。是否有可能在我的代码行中找到3个子字符串来查找我的终点?在字符串中查找子字符串w/java

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 * Ç * TGA * TTGAC * ATG * 牛逼 * TAG * TAG 我可以得到Ç打印,但不能使它到T。我的程序停止运行,只要它发现第一个子字符串“C

+1

我认为这个问题会更容易回答,如果你给你的预期产出。 –

+0

或完整的代码可能也有帮助(至少是关于解析的代码) – Najzero

+1

[这就是说,我有一种感觉,这个库的方法可以解决你的问题。](http://commons.apache.org/lang/ api-2.5/org/apache/commons/lang/StringUtils.html#countMatches%28java.lang.String,%20java.lang.String%29)如果这不是你所需要的,那么在StringUtils中可能有另一种方法可用您。 –

回答

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 ""; 
} 
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,因为前缀和后缀是非常不同的。