Remplacer chaine en java [Résolu/Fermé]

Signaler
Messages postés
11
Date d'inscription
lundi 10 octobre 2011
Statut
Membre
Dernière intervention
3 novembre 2011
-
Messages postés
11
Date d'inscription
lundi 10 octobre 2011
Statut
Membre
Dernière intervention
3 novembre 2011
-
Bonjour,

j'ai besoin de votre aide s'il vous plait: j'ai une chaine de caractère ,de veux remplacer la lettre"a" par la lettre"t" et "c" par "g" et "t" par "a" et "g" par "c"
j'ai fais comme suit mais c'est faux;

public class calcul {

public static void main(String[] args) {

String s="atcg";
String s1=null;
int i;


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

if(s.charAt(i)="a") {s1=s.replace("a", "t");}
if(s.charAt(i)="t") {s1=s.replace("t", "a");}
if(s.charAt(i)="c") {s1=s.replace("c", "g");}
if(s.charAt(i)="g") {s1=s.replace("g", "c");}



}
{System.out.println("La chaine s1 est : "+s1);}
}}






5 réponses

Messages postés
11
Date d'inscription
lundi 10 octobre 2011
Statut
Membre
Dernière intervention
3 novembre 2011
1
J'ai corrigé l'exemple et ça ne m'affiche plus d'erreur ,j'ai fait comme suit:
public class calcul {

public static void main(String[] args) {

String s="atcg";
String s1=null;
int i;


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

if(s.charAt(i)=='a') {s1=s.replace("a", "t");}

if(s.charAt(i)=='t') {s1=s.replace("t", "a");}

if(s.charAt(i)=='c') {s1=s.replace("c", "g");}

if(s.charAt(i)=='g') {s1=s.replace("g", "c");}



}
{System.out.println("La chaine s1 est : "+s1);}
}}


mais le résultat est: la chaine est: atcc ça veut dire qu'il n'a remplacé que la lettre "g" par "c"!!!pourquoi les autres lettres ne sont pas remplacées?savez vous pourquoi s'il vous plait?
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
38044
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
10 octobre 2020
1 857
bonjour parce que tu "écrases" à chaque fois ta variable s1...

tu peux utiliser la méthode "concat" de la classe String ou alors utiliser la classe Stringbuffer et ses méthodes "append".
Messages postés
11
Date d'inscription
lundi 10 octobre 2011
Statut
Membre
Dernière intervention
3 novembre 2011
1 >
Messages postés
38044
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
10 octobre 2020

je ne sais pas comment utiliser la méthode concat :(
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
Tu modifies a en t, mais après avec le if t tu remets le caractères à a !!! Met des else ou fait un switch...
De plus sers toi soit de s, soit de s1, mais pas des deux, une seule suffit, et là tu te mélanges.
De plus attention, quand tu trouves charAt(i) tu utilises replace mais cette méthode ne dépend pas de i !!!
Il vaudrait mieux utiliser replaceAll comme je l'ai fait plus haut, pour faire tes permutations.
Ou alors manipules un tableau de caractères avec String.toCharArray(), modifies ton tableau, et une fois terminé, construit ta nouvelle chaîne à partir de ce tableau.La confiance n'exclut pas le contrôle
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
C'est s1 que tu dois traiter à chaque fois, pas s (qui ne sers à rien)

if (s1.charAt(i)=='a') {s1=s1.replace("a", "t"); }
Remarque : il vaut mieux utiliser un switch plutôt que de faire 4 if.
De plus, regarde replaceAll c'est bien plus efficace que de faire une boucle...

s1 = s1.replaceAll("a","x"); 
s1 = s1.replaceAll("t","a"); 
s1 = s1.replaceAll("x","t"); 

s1 = s1.replaceAll("c","y"); 
s1 = s1.replaceAll("g","c"); 
s1 = s1.replaceAll("y","g");

La confiance n'exclut pas le contrôle
Messages postés
11
Date d'inscription
lundi 10 octobre 2011
Statut
Membre
Dernière intervention
3 novembre 2011
1
je vous remercie pour votre réponse mais le problème c'est que s1.charAt(i) est souligné en rouge et on m'affiche" The left-hand side of an assignment must be a variable" c'est quoi cette erreur?
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
C'est parce que tu as mis = (affectation) au lieu de == (comparaison)
Messages postés
11
Date d'inscription
lundi 10 octobre 2011
Statut
Membre
Dernière intervention
3 novembre 2011
1
j'ai changé le code;j'ai fait ça:
public class calcul {

public static void main(String[] args) {

String[]s={"atcg"};
int i;
for (i=0;i<s.length;i++)
{
switch (s[i])
{

case "a": s[i]="t";
case "t": s[i]="a";
case "c": s[i]="g";
case "g": s[i]="c";break;

}
}
}

}

encore une erreur au niveau de switch s[i]: Cannot switch on a value of type String. Only convertible int values or enum constants are permitted
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
String[] s = {"atcg"}; ne fera très certainement pas ce que tu veux !!!
En effet s[i] n'est pas un caractère, mais un String, et switcher un String n'est pas possible.
C'est d'ailleurs pour cela qu'on ne peut pas faire case "a", mais case 'a' (sans oublier les break !)
Si tu veux utiliser un tableau de caractères, tu dois utiliser la méthode toCharArray()comme je l'ai marqué plus haut :

String s = "atcg";
char[] tab = s.toCharArray();

for (i=0; i<tab.length; i++)
{
   switch (tab[i])
   {
       case 'a' : s[i]='t'; break;
       case 't' : s[i]='a'; break;
       case 'c' : s[i]='g'; break;
       case 'g' : s[i]='c'; break;
   }
}
Messages postés
11
Date d'inscription
lundi 10 octobre 2011
Statut
Membre
Dernière intervention
3 novembre 2011
1
vous avez copié le contenu de la chaine s dans un tableau tab? mais quand je veux afficher le contenu de tab avec la méthode tab.toString() rien n'est affiché!
j'ai essayé de tester si tab contient la chaine de s en faisant ;system.out.println("le contenu du tableau tab est;" +tab.toString()");
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
Il faut ABSOLUMENT que tu ailles faire un tour dans la documentation !
Il y a des choses que tu ne connais pas, c'est normal, mais il faut que tu puisses trouver ce qui te manque quand tu en as besoin...

Ici pour résoudre ton problème tu auras besoin du constructeur String(char[] value)

Salut,

Voici une solution (proche de celle que tu as utilisée):
String str1 = "atcg";
         String str2 = ""; 
      
         for(int i = 0; i < str1.length(); i++)
         {
            if(str1.charAt(i) == 'a')
               str2 = str2.concat("t");
            else
               if(str1.charAt(i) == 'c')
                  str2 = str2.concat("g");
               else
                  if(str1.charAt(i) == 't')
                     str2 = str2.concat("a");
                  else
                     if(str1.charAt(i) == 'g')
                        str2 = str2.concat("c");
            System.out.println("La chaine str1 est : " + str1);
            System.out.println("La chaine str2 est : " + str2);
         }
--
Plus on apprend... plus on se rend compte qu'on ne connaît pas grand-chose.
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
Il serait peut-être bon d'avoir un dernier else, pour ajouter le caractère si ce n'est pas a,t,c ou g !
Et quand on commence à avoir 4 if imbriqués il faut absolument penser au switch !
De plus, tu vas recréer un String à chaque fois que tu vas ajouter un caractère, or avec des String c'est assez lourd, il vaudrait mieux utiliser un StringBuilder et faire des append successifs...
Messages postés
11
Date d'inscription
lundi 10 octobre 2011
Statut
Membre
Dernière intervention
3 novembre 2011
1
je vous remercie ,c'est bon j'ai résolu le problème ,un ami m'a envoyé le code :

public class remplacer {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="atcg";
String s1 = "";
int i =0, j=1;
while(i < s.length() && j<s.length()) {
s1 = s1.concat(""+s.charAt(i+1));
s1 = s1.concat(""+s.charAt(j-1));

j+=2;
i+=2;
}

System.out.println(s);
System.out.print(s1);
}

}
Messages postés
11
Date d'inscription
lundi 10 octobre 2011
Statut
Membre
Dernière intervention
3 novembre 2011
1
et j'ai une autre solution :

public class remplacer {

/**
* @param args
*/
public static void main(String[] args) {
String s = "atcg";

StringBuilder builder = new StringBuilder(s.length());

for (char c : s.toCharArray()) {

switch (c) {
case 'a':
builder.append('t');
break;
case 't':
builder.append('a');
break;
case 'c':
builder.append('g');
break;
case 'g':
builder.append('c');
break;
default:
builder.append(c);
}
}

String newstring = builder.toString();

{System.out.println(newstring);}}}