本帖最后由 casularm 于 2010-06-14 16:00:27 编辑

解决方案 »

  1.   


         String[] str = {"BAAD","BACGTDA","DDDDD","AAAAAA","CCCCC"};//测试字符串
         for(int i=0;i<str.length;i++)
         {
         Pattern p = Pattern.compile("[ACGTGTC&&["+str[i]+"]]"); //匹配正则
         int len = str[i].length()-p.matcher(str[i]).replaceAll("").length();//判断长度
         if(len >=5)
         {
          System.out.println( str[i] +"符合");//输出
         }else
         {
          System.out.println( str[i] +"不符合");//输出
         }
      }
    结果
    BAAD不符合
    BACGTDA符合
    DDDDD不符合
    AAAAAA符合
    CCCCC符合
      

  2.   

    To fengyun817:感谢您的帮助!可能是我没说清楚,与pattern的7个字符必须在同样位置出现相同字符才能算一个匹配,不是7个里面任意匹配5个都算。
      

  3.   


    没想到好的方法,
    不用正则表达式行吗?(以下代码均7位数据测试,未考虑长度不够的问题)     String[] str = {"BAADAAA","BACGTDA","TCGAGTC","AAAAAAB","ACTTATC"};//测试字符串     
         String pattern = "ACGTGTC";
         
         for(int i=0;i<str.length;i++)
         {
          int count = 0;
          for(int j = 0;j<str[i].length();j++)
          {
          if(pattern.charAt(j)==str[i].charAt(j))
          {
          count ++;
          }
          }
          if(count>=5)
          {
          System.out.println( str[i] +"符合");//输出
          }else
         {
          System.out.println( str[i] +"不符合");//输出
         }
         }
      

  4.   


    Pattern p = Pattern.compile("(A)?\\w??(C)?\\w??(G)?\\w??(T)?\\w??(G)?\\w??(T)?\\w??(C)?\\w??");
    String str ="BCGFGTC";
    Matcher mt = p.matcher(str);
    int counter =0;
    if(mt.matches()){
    int count=mt.groupCount();
            for(int i=1;i<=count;i++){
      System.out.println(i+"\t"+mt.group(i));
      counter=mt.group(i)!=null?(++counter):counter;
    }
    System.out.println(counter);  //counter为出现次数  >=5时满足

    }
      

  5.   

    看来是不太好解决,Headsen的方法是可以,但是计算量比之前还要大。因为需要匹配的字符串很长,一般有3000多个字符,本来指望能够像matcher.find()之后用matcher.start()直接找到匹配位置的,看来也只能用土办法了。
      

  6.   

    用正则表达式能做出来  但今天我用的别人的电脑  开发工具 帮助手册都没有   我先关注  明天给你答案如果要匹配的字符是 abcde
    正则表达式大概是   \a\\s*\b\\s*\c\\s*\d\\s*\e\\s*