【问题标题】:finding substrings in strings w/java在 w/java 的字符串中查找子字符串
【发布时间】:2013-01-13 08:38:14
【问题描述】:

如何在一个字符串中找到多个子字符串?让我们将其与基因测序进行比较。你有一个字符串: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

,我的程序就会停止运行

【问题讨论】:

标签: java string substring


【解决方案1】:

你可以使用正则表达式,对于序列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,因为前缀和后缀明显不同。

【讨论】:

    【解决方案2】:

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

    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 "";
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-04
      • 2011-07-13
      • 2011-01-18
      • 1970-01-01
      • 2012-09-07
      • 2015-09-16
      • 2021-08-13
      相关资源
      最近更新 更多