1

好的,所以我被要求创建一个方法补充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”的新字符串中。

4

3 回答 3

5

字符串是不可变的。当您调用 时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();
}
于 2013-02-28T18:52:16.497 回答
0

的补码GC(not T)。所以应该是...

 if(dna.charAt(i) == 'G'){
        builder.append('C');
    }
于 2019-07-02T20:43:48.650 回答
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;
}
于 2019-11-30T15:36:33.517 回答