题目
脱氧核糖核酸(DNA)是一种在细胞核中发现的化学物质,带有生物体发育和功能的“指令”。
在DNA串中,符号“A”和“T”是彼此的互补,如“C”和“G”。你有DNA的一条链(字符串,Haskell除外);你需要获得另一个互补的一面。 DNA链从不是空的或根本没有DNA(再次,除了Haskell)。
例子如下:
DnaStrand.makeComplement("ATTGC") // return "TAACG"
DnaStrand.makeComplement("GTAT") // return "CATA"
实现方法(一)
思路:先将字符串dna转化为char数组,再用foreach循环逐个替换,最后再将char数组转String输出。
其中对char数组中的每一个元素进行操作时,又可以采用if语句或者是switch语句,这里分别列出。
使用if语句代码如下:
class DnaStrand{
public static String makeComplement(String dna){
char[] arr = dna.toCharArray();
for(char i : arr){
if(i=='A') i = 'T';
else if(i=='T') i = 'A';
else if(i=='C') i = 'G';
else if(i=='G') i = 'C';
else System.out.println("error");
}
return (new String(arr));
}
}
使用switch语句代码如下:
class Dnastrand{
public static String makeComplement(String dna){
char[] arr = dna.toCharArray();
for(char i : arr){
switch (i){
case 'A':
i = 'T';
break;
case 'T':
i = 'A';
break;
case 'C':
i = 'G';
break;
case 'G':
i = 'C';
break;
}
}
return (new String(arr));
}
}
实现方法(二)
思路:直接调用String类的方法replace()实现,这里也有两种实现方式:一种是找一个中间变量,另一种是将大写的"A,T,C,G"转化为小写的"a,t,c,g",之后再调用String类的toUpperCase()
方法。
方法一:
class DnaStrand {
public static String makeComplement(String dna) {
return dna.replace("A","M")
.replace("T","A")
.replace("M","T")
.replace("C","N")
.replace("G","C")
.replace("N","G");
}
}
方法二:
class DnaStrand {
public static String makeComplement(String dna) {
return dna.replace("A","t")
.replace("T","a")
.replace("C","g")
.replace("G","c")
.toUpperCase();
}
}
知识点总结:
1.String转char型数组使用的是toCharArray()
方法;
2.char数组转String有两种方法,一是new String(arr)
,另一种方法则是String.valueOf(char[] arr)
。
3.String类的方法String replace(CharSequence oldString, CharSequence newString)
可直接替换字符串中的内容;
4.String类的方法String toLowerCase()
和String toUpperCase()
可分别将字符串大写化和小写化。
本文参考:Click