Java中的 .replace()方法替换被替换的内容



下面是我的代码。我正在试着输入"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

最新更新