下面是我的代码。我正在试着输入"atc"。以获得"uag"的输出。它所做的只是将'A'替换为'U', 'T'替换为'A', 'C'替换为'G', 'G'替换为'C'(就像转录- DNA到mRNA)。
问题是……当我输入ATC, AGC, TGC或任何以"C"结尾的东西时,程序会将"C"替换为"G",然后继续将新的"G"替换为"C"。
.replace('C','G').replace('G','C');
如何阻止程序将"C"替换回"C"?我的输入应该是AGC,预期的输出应该是UCG。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String codon = scanner.next();
String basePairing = codon
.replace('A','U').replace('T','A')
.replace('C','G').replace('G','C');
System.out.println(basePairing);
}
}
String codon = scanner.next(); /*ATGC*/
char[] codonArr = codon.toCharArray();
for (int i=0;i<codonArr.length;i++)
{
switch(codonArr[i])
{
case 'A': {codonArr[i]='U';break;}
case 'T': {codonArr[i]='A';break;}
case 'C': {codonArr[i]='G';break;}
case 'G': {codonArr[i]='C';break;}
}
}
codon = new String(codonArr);
System.out.println(codon); /*UACG*/
In:ATGC
Out:UACG
您可以通过条件分支和使用String#replaceFirst
来实现,如下所示:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String codon = scanner.next();
String basePairing = codon.contains("G")?
codon.replace('A','U').replace('T','A')
.replace('C','G').replaceFirst("G", "C"):
codon.replace('A','U').replace('T','A')
.replace('C','G');
System.out.println(basePairing);
}
}
示例运行:
AGC
UCG
另一个示例运行:
ATC
UAG
这里有一个小的characterSwap()您可能会发现有用的方法:
public static String characterSwap(String inputString, Character... characters) {
if (characters.length == 0 || characters.length % 2 != 0) {
throw new IllegalArgumentException("characterSwap() Method Error! "
+ "Invalid parameter pairing for characters swapping!");
}
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < inputString.length(); i++) {
Character curChar = inputString.charAt(i);
for (int j = 0; j < characters.length; j += 2) {
if (characters[j] != null && curChar.equals(characters[j])) {
curChar = characters[j + 1];
break;
}
}
if (curChar != null && curChar != 0) {
sb.append(curChar.toString());
}
}
return sb.toString();
}
使用它:
String str = characterSwap("ATC, AGC, TGC", 'A', 'U', 'T', 'A', 'C', 'G', 'G', 'C');
System.out.println(str);
遇到的"A"被替换为"U",遇到的"T"被替换为"A",遇到的"C"被替换为"G",遇到的"G"被替换为"C"。
控制台输出将是:
UAG, UCG, ACG
交换字符也可以作为Character[]数组提供。如果你想删除一个特定的字符,那么在字符交换对中传递null
或' '
,例如:
String str = characterSwap("ATC, AGC, TGC", 'A', 'U', 'T', null, 'C', 'G', 'G', 'C');
在这里,当遇到'T'时,它将被删除。
控制台输出将是:
UG, UCG, CG