Java 如何使用for在字符串中迭代替换每个字符(a与T,T与a,G与C,C与G)?

Java 如何使用for在字符串中迭代替换每个字符(a与T,T与a,G与C,C与G)?,java,backend,Java,Backend,我对编码是新手。我在做一个练习,我创建一个随机的ADN,这个长度是用户输入的。这,我必须生成一个新的补充adn 主体ADN只使用=A,C,G,T。在我的新补充ADN中,我必须更改每个字符,因为“A”需要替换为“T”,每个“T”需要替换为这个“A”,每个“G”必须替换为“C”,每个“C”需要替换为“G” 例如: 我的随机ADN将是=ACCGTTTTAAG。我的新补充ADN将是=tggcaattc 这是我的代码,我试图使用for在字符串中迭代并替换字母。但是没有成功。但我想我有这个想法。我怎样才能继

我对编码是新手。我在做一个练习,我创建一个随机的ADN,这个长度是用户输入的。这,我必须生成一个新的补充adn

主体ADN只使用=A,C,G,T。在我的新补充ADN中,我必须更改每个字符,因为“A”需要替换为“T”,每个“T”需要替换为这个“A”,每个“G”必须替换为“C”,每个“C”需要替换为“G”

例如:

我的随机ADN将是=ACCGTTTTAAG。我的新补充ADN将是=tggcaattc

这是我的代码,我试图使用for在字符串中迭代并替换字母。但是没有成功。但我想我有这个想法。我怎样才能继续

public String cadenaComplementaria(String ADN) {
this.ADN = ADN;
String ADNComplementario = "";

for (int i = 0; i <= ADN.length(); i++) {

    if(this.ADN.charAt(i)=='A'){
        this.ADN.replace('A','T');
        ADNComplementario = this.ADN;
    }
    else if(this.ADN.charAt(i)=='C'){
        this.ADN.replace('C', 'G');
    }
    else if(this.ADN.charAt(i)=='G'){
        this.ADN.replace('G','C');
    }
    else if (this.ADN.charAt(i)=='T'){
        this.ADN.replace('T','A');
    }
return ADNComplementario;
}
所以我试着用for在我的字符串中迭代,我试着读取这个位置上的字符,这样它就可以被替换,但是它不起作用。我试图将ADN值转移到ADNComplementario,以便在我的main中调用它,也许我做错了

正如您所看到的,它是一个函数,我正在学习面向对象的编程。

简单

您只需要使用您使用得很好的替换方法

public String cadenaComplementaria(String adn) {
    return adn.replace("C", "B").replace("G", "C").replace("B", "G")
              .replace("A", "D").replace("T", "A").replace("D", "T");
}
在这个解决方案中,我们首先用B替换C,这样我们就可以用C替换所有的G。然后我们已经知道B过去是C,所以我们用G替换B

我们对A和T做了同样的事情,用字母D作为临时字母。

简单

您只需要使用您使用得很好的替换方法

public String cadenaComplementaria(String adn) {
    return adn.replace("C", "B").replace("G", "C").replace("B", "G")
              .replace("A", "D").replace("T", "A").replace("D", "T");
}
在这个解决方案中,我们首先用B替换C,这样我们就可以用C替换所有的G。然后我们已经知道B过去是C,所以我们用G替换B

我们对A和T也做了同样的事情,使用字母D作为临时字母。

试试这个:

StringBuilder ADNComplementario = new StringBuilder();

for (int i = 0; i <= ADN.length(); i++) {

    if(this.ADN.charAt(i)=='A'){
        ADNComplementario.append("T");
    }
    else if(this.ADN.charAt(i)=='C'){
        ADNComplementario.append("G");
    }
    else if(this.ADN.charAt(i)=='G'){
        ADNComplementario.append("C");
    }
    else if (this.ADN.charAt(i)=='T'){
        ADNComplementario.append("A");
    }
return ADNComplementario.toString();
试试这个:

StringBuilder ADNComplementario = new StringBuilder();

for (int i = 0; i <= ADN.length(); i++) {

    if(this.ADN.charAt(i)=='A'){
        ADNComplementario.append("T");
    }
    else if(this.ADN.charAt(i)=='C'){
        ADNComplementario.append("G");
    }
    else if(this.ADN.charAt(i)=='G'){
        ADNComplementario.append("C");
    }
    else if (this.ADN.charAt(i)=='T'){
        ADNComplementario.append("A");
    }
return ADNComplementario.toString();

在Java中,字符串是不可变的,这意味着在创建字符串后不能更改它。replace等方法返回新字符串

这意味着,这行代码什么也不做:它创建新字符串,然后将其丢弃

this.ADN.replace('A','T');
解决这个问题的许多方法之一是使用字符数组构建DNA序列。然后可以从数组中创建字符串。例如:

char[] adnComplementario = new char[ADN.length()];

for (int i = 0; i < ADN.length(); i++) {

    if (ADN.charAt(i)=='A'){
        adnComplementario[i] = 'T';
    }

    if (ADN.charAt(i)=='T'){
        adnComplementario[i] = 'A';
    }

    // add cases for C and G
}

return new String(adnComplementario);

在Java中,字符串是不可变的,这意味着在创建字符串后不能更改它。replace等方法返回新字符串

这意味着,这行代码什么也不做:它创建新字符串,然后将其丢弃

this.ADN.replace('A','T');
解决这个问题的许多方法之一是使用字符数组构建DNA序列。然后可以从数组中创建字符串。例如:

char[] adnComplementario = new char[ADN.length()];

for (int i = 0; i < ADN.length(); i++) {

    if (ADN.charAt(i)=='A'){
        adnComplementario[i] = 'T';
    }

    if (ADN.charAt(i)=='T'){
        adnComplementario[i] = 'A';
    }

    // add cases for C and G
}

return new String(adnComplementario);

最简单的方法是将字符串转换为字符数组,并在其中迭代替换字符。让你看看我在这里说的是:

public String cadenaComplementaria(String ADN) {
    this.ADN = ADN;
    char[] ADNarr = ADN.toCharArray();

    for (int i = 0; i <= ADN.length(); i++) {
        if (ADNarr[i] == 'A'){
            ADNarr[i] = 'T';
        }
        else if (ADNarr[i] == 'C'){
            ADNarr[i] = 'G';
        }
        else if (ADNarr[i] == 'G'){
            ADNarr[i] = 'C';
        }
        else if (ADNarr[i] == 'T'){
            ADNarr[i] = 'A';
        }
    }

    String converted = new String(ADNarr);
    this.ADN = converted;
    return converted;
}

这是一种很好的方法,可以毫无问题地替换所有内容。

最简单的方法是将字符串转换为字符数组,并在其中迭代替换字符。让你看看我在这里说的是:

public String cadenaComplementaria(String ADN) {
    this.ADN = ADN;
    char[] ADNarr = ADN.toCharArray();

    for (int i = 0; i <= ADN.length(); i++) {
        if (ADNarr[i] == 'A'){
            ADNarr[i] = 'T';
        }
        else if (ADNarr[i] == 'C'){
            ADNarr[i] = 'G';
        }
        else if (ADNarr[i] == 'G'){
            ADNarr[i] = 'C';
        }
        else if (ADNarr[i] == 'T'){
            ADNarr[i] = 'A';
        }
    }

    String converted = new String(ADNarr);
    this.ADN = converted;
    return converted;
}

这是一种很好的方法,可以毫无问题地替换所有内容。

尝试使用查找表映射java9:

String adn = "ACCGTTTTAAG";
Map<Character, Character> adnComplementLookup = Map.of('A', 'T','T', 'A','G', 'C','C', 'G');
StringBuffer adnComplement = new StringBuffer();
for(int i = 0; i < adn.length(); i++) {
    adnComplement.append(adnComplementLookup.get(adn.charAt(i)));
}
System.out.println(adnComplement.toString());

使用查找表映射java9尝试此操作:

String adn = "ACCGTTTTAAG";
Map<Character, Character> adnComplementLookup = Map.of('A', 'T','T', 'A','G', 'C','C', 'G');
StringBuffer adnComplement = new StringBuffer();
for(int i = 0; i < adn.length(); i++) {
    adnComplement.append(adnComplementLookup.get(adn.charAt(i)));
}
System.out.println(adnComplement.toString());

你的问题是你替换了一个字符,但是你又替换了一个字符,所以你的字符串被打乱了。问题是我不喜欢,我想只改变一个字符。因为我们可以说是ACGT。新字符串必须是TGCA。所以如果我先用T替换A,那么我必须用T替换A,它会把每个T替换成A。这听起来像个谜…或者我错了,我很困惑。你们应该阅读替换方法的文档。因为替换方法会替换所有字符,所以不需要遍历每个字符。非常感谢。我还没有看到这个话题,这就是为什么我没有考虑使用它,对不起。。。但我会读它来学习!再次感谢您提供的文档。您遇到的问题是,您替换了一个字符,但又替换了一个字符,因此字符串被置乱。问题是我不喜欢,我想只更改一个字符。因为我们可以说是ACGT。新字符串必须是TGCA。所以如果我先用T替换A,那么我必须用T替换A,它会把每个T替换成A。这听起来像个谜…或者我错了,我很困惑。你们应该阅读替换方法的文档。因为替换方法会替换所有字符,所以不需要遍历每个字符。非常感谢。我还没有看到这个话题,这就是为什么我没有考虑使用它,对不起。。。但我会读它来学习!再次感谢您提供的文档。哦,我试过这样做,但我没有将它们改为随机字母,以便以后修复它们。和蔼可亲。非常感谢你!!!!!!!我太高兴了,哈哈。谢谢你,哦,我试过了,但是我没有把它们改成随机的字母
我的天哪。和蔼可亲。非常感谢你!!!!!!!我太高兴了,哈哈。谢谢你。谢谢你,这两种解决方案对我都有效!你们真是和蔼可亲!!!我希望有一天能像你一样哈哈。谢谢你!谢谢你,这两种解决方案对我都有效!你们真是和蔼可亲!!!我希望有一天能像你一样哈哈。谢谢你!谢谢你的时间,我也想试试这段代码,它也很有效!我在课堂上还没有真正看到数组,但我肯定会把它作为将来新练习的参考!谢谢你的时间,我也想试试这段代码,它也很有效!我在课堂上还没有真正看到数组,但我肯定会把它作为将来新练习的参考!嗯,有很多关于数组的建议,我会开始使用数组或将字符串转换为数组,非常感谢你给我展示。这真的很有趣,它将帮助我提高!!感谢uHmm对使用数组的大量建议,我将开始使用数组或将字符串转换为数组。非常感谢你给我展示。这真的很有趣,它将帮助我提高!!谢谢你,我还没有看到这个:哦,非常有趣,我用过它,它也很有效。这就是我喜欢的编程,找到解决方案的不同方法。谢谢你!哇,我还没有看到这个:哦,非常有趣,我用过它,它也很管用。这就是我喜欢的编程,找到解决方案的不同方法。谢谢你!