Remplacer chaine en java
Résolu
nejla.java
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
nejla.java Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
nejla.java Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
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);}
}}
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:
- Remplacer chaine en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Remplacer disque dur par ssd - Guide
- Eclipse java - Télécharger - Langages
- Chaine tnt gratuite sur mobile - Guide
5 réponses
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?
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?
C'est s1 que tu dois traiter à chaque fois, pas s (qui ne sers à rien)
De plus, regarde replaceAll c'est bien plus efficace que de faire une boucle...
La confiance n'exclut pas le contrôle
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
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
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
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 :
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; } }
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)
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):
Plus on apprend... plus on se rend compte qu'on ne connaît pas grand-chose.
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.
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...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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);
}
}
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);
}
}
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);}}}
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);}}}
tu peux utiliser la méthode "concat" de la classe String ou alors utiliser la classe Stringbuffer et ses méthodes "append".
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