好的,所以我被要求创建一个方法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'的新字符串中。
答案 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;
}