创建一种方法来返回DNA链的WC补体

时间:2013-02-28 18:47:53

标签: java

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

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循环中的String存储到一个名为'dnaWC'的新字符串中。

3 个答案:

答案 0 :(得分:4)

字符串是不可变的。当您调用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();
}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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