Remplacer chaine en java

Résolu/Fermé
nejla.java Messages postés 11 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 - 10 oct. 2011 à 15:38
nejla.java Messages postés 11 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 - 11 oct. 2011 à 10:00
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);}
}}






A voir également:

5 réponses

nejla.java Messages postés 11 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 1
10 oct. 2011 à 16:43
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
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
10 oct. 2011 à 17:06
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".
0
nejla.java Messages postés 11 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 1 > choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024
10 oct. 2011 à 17:18
je ne sais pas comment utiliser la méthode concat :(
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 10/10/2011 à 17:32
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
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 10/10/2011 à 16:04
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
0
nejla.java Messages postés 11 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 1
10 oct. 2011 à 16:00
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?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 oct. 2011 à 16:09
C'est parce que tu as mis = (affectation) au lieu de == (comparaison)
0
nejla.java Messages postés 11 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 1
10 oct. 2011 à 17:58
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
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 oct. 2011 à 18:20
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;
   }
}
0
nejla.java Messages postés 11 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 1
10 oct. 2011 à 18:53
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()");
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 oct. 2011 à 19:08
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)
0
Utilisateur anonyme
11 oct. 2011 à 07:39
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.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
11 oct. 2011 à 07:47
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nejla.java Messages postés 11 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 1
11 oct. 2011 à 09:58
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);
}

}
0
nejla.java Messages postés 11 Date d'inscription lundi 10 octobre 2011 Statut Membre Dernière intervention 3 novembre 2011 1
11 oct. 2011 à 10:00
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);}}}
0