用/ java查找字符串中的子串

时间:2013-01-13 08:38:14

标签: java string substring

如何在字符串中找到多个子字符串?让我们将它与基因测序进行比较。你有一个字符串:TTCGAGATGCTGATTGACATGTTAGTAG。我已经想出如何找到我的序列的开始(ATG是起点)和仅使用TGA的序列结束。我无法弄清楚如何重复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

后立即停止运行

2 个答案:

答案 0 :(得分: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 "";
}

答案 1 :(得分: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,因为前缀和后缀有很大不同。