Problème tableau de String ajout multi

alexdu44340 Messages postés 13 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 11 juillet 2013 - 23 juil. 2011 à 20:06
alexdu44340 Messages postés 13 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 11 juillet 2013 - 25 juil. 2011 à 20:57
bonjour a tous.
je suis alexdu44340, je suis débutant en informatique et en créant un programme, je suis tombé sur un problème:

a l'intérieur d'un tableau de string créé ainsi:
String variable[] = {"texte","texte n°2"};
or j'aimerais pouvoir ajouter une variable string a l'intérieur au fur et a mesure d'une boucle for ainsi pour transformer une chaîne de caractères de ce type:
.jpg .png."

for (int c=0; c<reponse.length(); c++)
{
if(reponse.substring(c,c+1) == " ")
{
String name = reponse.substring(D,c);
D = c+1;
//ajout de la variable.
}
if(reponse.substring(c,c+1) "." & c reponse.length())
{
String name = reponse.substring(D,c);
//ajout de la variable.
}
}
est ce quelqu'un aurait une idée merci.

14 réponses

alexdu44340 Messages postés 13 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 11 juillet 2013
23 juil. 2011 à 20:08
désolé pour le bug des couleurs quand j'ai écrit le message.
0
Utilisateur anonyme
24 juil. 2011 à 00:27
Salut,

Le tableau variable est un tableau de 2 éléments.
Ce nombre 2 est définitif, son contenu actuel est "texte" pour le 1er élément et "texte n°2" pour le second.
Il n'est pas possible d'ajouter un élément (pas de redimensionnement possible...), mais je précise qu'on peut tout de même modifier le contenu des 2 éléments même si ce n'est pas ce que tu voudrais faire...

La solution serait d'utiliser une ArrayList<String> ...

Quant à ce que tu voudrais ajouter je ne saisi pas ce que tu dois faire surtout qu'on n'a aucune idée de ce qu'est D pour le substring.

Cordialement,

Dan





...\ Dan /...
0
alexdu44340 Messages postés 13 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 11 juillet 2013
24 juil. 2011 à 12:06
merci beaucoup de ta réponse Dan!

Pour te répondre, la variable D est définie par 0 ( c'est un int);

et je vais essayer avec le arraylist.
0
alexdu44340 Messages postés 13 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 11 juillet 2013
24 juil. 2011 à 14:21
sauf que la fonction que j'utilise est ArrayList.add(String).
mais quand je le lis, on me dis que la liste est vide ! !
est ce quelqu'un sait pourquoi ?
0

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

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
25 juil. 2011 à 08:29
Bonjour,

Donne nous ton code pour qu'on voit ce qui ne va pas.

Pour utiliser une ArrayList il faut faire ceci :

List<String> liste = new ArrayList<String>();
liste.add("element1");
liste.add("element2");
for(int i=0; i<liste.size(); i++){
    System.out.println(liste.get(i));
}
0
alexdu44340 Messages postés 13 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 11 juillet 2013
25 juil. 2011 à 10:08
ok donc voici ma fonction :
elle permet de changer un string de cette forme : ".extenssion1 .extenssion2."

public static List<String> expression()
{

Scanner sc1 = new Scanner(System.in);
System.out.println("entrez la liste des extenssions dont vous voulez les fichiers dans cette ordre : .extenssion1 .extenssoin2. /!\\ ne pas oublier le point.");
String reponse2 = sc1.nextLine();
int D = 1;
List<String> list = new ArrayList<String>();
//reponse = ".jpg .png."; " " 4
for (int c=0; c<reponse2.length(); c++)
{
System.out.println(reponse2.substring(c,c));
if(reponse2.substring(c,c+1) == " ")
{
System.out.println("1 if");
String name = reponse2.substring(D,c);
list.add(name);
D = c+1;
}
if(reponse2.substring(c,c+1) "." & c reponse2.length())
{
String name2 = reponse2.substring(D,c-1);
list.add(name2);
System.out.println("2 if");
}
}
for (int a=0; a<list.size(); a++)
{
System.out.println(list.get(a));
}
return list;
}

le problème que j'ai trouvé c'est que au niveau des substring, ce ne donne rien.
Si quelqu'un avait une idée ça serait génial!
et merci aussi a ceux qui m'ont aidé jusqu’ici.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
25 juil. 2011 à 11:32
reponse2.substring(c,c+1) == " " est toujours faux, les String sont des objets, tu comparies ici toujours les références, il faut que tu utilises .equals(). ou alors remplaces le substring par un charAt(c) :

reponse2.charAt(c) == " ".charAt(0)


Tu pourrais utiliser StringTokenizer pour faire la même chose plus simplement, c'est une classe qui te permet de décomposer une chaine de caractères, je te donne un exemple d'utilisation, à toi de l'adapter :

String chaine = "une.chaine.de.caracteres";
StringTokeniser st = new StringTokenizer(chaine, ".");
while(st.hasMoreToken()){
     System.out.println(st.nextToken());
}


Résultat de l'output :
une
chaine
de
caracteres
0
alexdu44340 Messages postés 13 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 11 juillet 2013
25 juil. 2011 à 11:39
super génial je vais tout de suite essayer et merci beaucoup pour ta réponse julien39 ! !
0
alexdu44340 Messages postés 13 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 11 juillet 2013
25 juil. 2011 à 12:08
par contre ta fonction ne serait pas :
StringTokenizer st = new StringTokenizer()

et quand je rentre
String texte = ".png.jpg";
StringTokenizer st = new StringTokenizer(texte," ")

l'output que j'ai c'est:

.png
.jpg
.png
.jpg
.png
.jpg
.png
.jpg
.png
.jpg
.png
.jpg
.png
.jpg
.png
.jpg
.png
.jpg

??? est ce que tu sais pourquoi?

ps: j'utilise un Scanner(System.in).
0
alexdu44340 Messages postés 13 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 11 juillet 2013
25 juil. 2011 à 12:27
désolé plutôt quand je rentre le texte .png .jpg
0
Utilisateur anonyme
25 juil. 2011 à 12:29
substring:

System.out.println(reponse2.substring(c,c));
Tu as la même valeur indice début et indice fin c'est normal que tu n'obtiennes rien.
Il faut que tu saches comment fonctionne substring:
-on extrait une sous-chaîne d'une chaîne de caracrères,
-cette extraction se fait de l'indice début jusqu'à l'indice fin non compris.
Donc avec (c,c) la sous-chaîne est obtenue de 0 à 0 non compris, puis de 1 à 1 non compris etc... donc jamais rien.

Mais si tu nous disais ce que tu veux faire avec reponse2 = ".jpg .png.";

...\ Dan /...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
25 juil. 2011 à 14:44
Peux tu nous montrer la totalité du code que tu exécutes avec les StringTokenizer ?
0
Utilisateur anonyme
25 juil. 2011 à 18:33
Re,

Pour que tu ne restes pas sur ta faim avec substring...

Supposons la saisie dans reponse de ".png .jpg"
Pour obtenir les 2 extensions dans 2 String >> ext1 et ext2 on peut faire:

String reponse = ".png .jpg";
// on recherche la position de l'espace
         int iSpace = reponse.indexOf(" ");
         if(iSpace != -1) // dans l'exemple on a 4
         {
            String ext1 = reponse.substring(0, iSpace); // soit (0, 4)
            String ext2 = reponse.substring(iSpace +1); // soit (5)
            // comme on ne cite pas l'indice fin l'extraction se fait
            // jusque la fin de la chaîne
            System.out.println("ext1: " + """ + ext1 + """);
            System.out.println("ext2: " + """ + ext2 + """);
         }
         else 
         //...... Erreur (pas de séparateur espace


Pour ne pas avoir à vérifier la présence du point avant le type, le mieux serait de ne pas demander la saisie de ce point, mais de l'ajouter lors de l'extraction, sauf si c'est un exercice imposé...

On peut accepter cette méthode car on n'a que 2 extensions, mais avec un nombre illimité la méthode avec StringTokenizer est bien préférable...

Ou alors on utilisera split pour enregistrer toutes les extensions directement dans un tableau...

Cordialement,

Dan

...\ Dan /...
0
alexdu44340 Messages postés 13 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 11 juillet 2013
25 juil. 2011 à 20:57
merci de ta réponse mais en fait c'est car pour l'ancienne version j'avait mit une boucle for, c'est pour cela et maintenant ca marche mais merci
0
Rejoignez-nous