【问题标题】:Create a method to return the the WC complement of a DNA strand创建一种方法来返回 DNA 链的 WC 互补序列
【发布时间】:2013-02-28 18:47:53
【问题描述】:

好的,所以我被要求创建一个方法补充WC(),它的工作原理如下:

public String complementWC()

返回 Watson Crick 补码,它是代表互补 DNA 链(即双螺旋中的另一条链)的字符串。因此,将所有 T 与 A 交换,将所有 A 与 T 交换,将所有 C 与 G 交换,将所有 G 与 C 交换。

这就是我设法做到的:

private String dna;

    public String complementWC(){
        String dnaWC = "";
        for(int i=0;i<dna.length();i++){
            if(dna.charAt(i) == 'T'){
                dna.replace(dna.charAt(i), 'A');
            }
            if(dna.charAt(i) == 'A'){
                dna.replace(dna.charAt(i), 'T');
            }
            if(dna.charAt(i) == 'C'){
                dna.replace(dna.charAt(i), 'G');
            }
            if(dna.charAt(i) == 'G'){
                dna.replace(dna.charAt(i), 'C');
            }   
            dnaWC = dna;
        }
        return dnaWC;
    }

现在,问题是这个方法只返回原始 dna 而不是 WCcomplement。所以,我不确定如何将 for 循环中的字符串存储到一个名为“dnaWC”的新字符串中。

【问题讨论】:

    标签: java


    【解决方案1】:

    字符串是不可变的。当您调用replace 时,它返回一个新字符串,而不是更改原始字符串,您会立即忽略返回的字符串。这就是为什么您的原始字符串从未改变的原因。

    您可以使用StringBuilder 构建一个新字符串,这样可以节省每次替换字符时创建一个新字符串的开销,因为只会创建一个新字符串。

    public String complementWC(){
        StringBuilder builder = new StringBuilder();
        for(int i=0;i<dna.length();i++){
            char c = dna.charAt(i);
            if(dna.charAt(i) == 'T'){
                builder.append('A');
            }
            if(dna.charAt(i) == 'A'){
                builder.append('T');
            }
            if(dna.charAt(i) == 'C'){
                builder.append('G');
            }
            if(dna.charAt(i) == 'G'){
                builder.append('T');
            }   
        }
        return builder.toString();
    }
    

    【讨论】:

    • 我明白了。但是有没有办法使用替换功能,然后将新字符串存储在 'dnaWC' 中?
    • 当然,您可以使用替换方法并将新字符串存储在dnaWC 中。您每次都会创建一个新的 String 对象,这取决于您。
    【解决方案2】:

    G 的补码是C(不是T)。所以应该是……

     if(dna.charAt(i) == 'G'){
            builder.append('C');
        }
    

    【讨论】:

      【解决方案3】:
      public static String complementWC(String dna) {
          char[] chars = dna.toCharArray();
          for(int i = 0; i < chars.length; i++) {
              chars[i] = getComplement(chars[i]);
          }
      
          return new String(chars);
      }
      
      private static char getComplement(char c) {
          switch(c) {
              case 'A': return 'T';
              case 'T': return 'A';
              case 'C': return 'G';
              case 'G': return 'C';
          }
      
          return c;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-09-17
        • 1970-01-01
        • 2014-10-01
        • 2013-12-20
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多